본문 바로가기
트러블슈팅/MW

[OHS] OPMN Ping failed Error 이슈

by sangyeon 2022. 5. 6.
728x90

현재 운영 중인 서비스에서 

OHS 11.1.1.7 제품에 Ping failed check 실패로 http 서비스가 재기동되는 문제가 발생되고 있다.

 

opmn은 ohs 11.x에서 http 서비스를 관리하는 프로세스로 opmn 프로세스가 http 프로세서에 주기적으로 ping으로 상태를 체크한다.

opmn은 default 20초에 1번씩 총 3번을 시도하고 실패할 경우, http 프로세서를 강제로 재기동 시킨다.

 

현재 운영중인 서비스에서는 2달에 한번 꼴로 Ping failed 이슈로 강제로 재기동되는데, 원인을 찾던 중에 debug 로그 설정 부재로 인해 뚜렷하게 ohs에서 남는 로그가 없었다.

 

그래서 오라클 SR을 통해 비슷한 사례가 예전에 있었다는 이야기를 듣게 되었다.

#1) 비슷한 타사 사례가 있는지?
->  과거에 비슷한 사례가 있었는데, MaxRequestsPerChild 0 -> MaxRequestsPerChild 1000 을 설정하여 해결된 경우가 있었습니다.
 
#2) 해당 옵션 설정으로 인한 Side-effect는있는지?
-> 말씀대로 process 재생성이 되므로 성능에 영향을 줄 수 있지만, 다른 고객의 경우에는 아직까지 해당 파라미터 적용으로 문제가 발생한 적은 없었습니다.
-> MaxRequestsPerChild 값을 10000 정도로 늘려 process 재생성 빈도를 줄여 볼 수도 있습니다.
 
#3) Q2. MaxRequestPerChild 설정 시에 추가로 같이 설정해줘야 하는 설정은 없는지?
ex) ServerLimit 6
->  네, 추가로 같이 설정해 주어야 하는 것은 없습니다.

MaxRequestsPerChild 옵션은 OHS가 기동시에 실행되는 Child 프로세스가 처리할 수 있는 Request 수를 뜻하고,

default 0으로 설정된 경우, 기동시에 올라간 Child 프로세스가 OHS를 재기동하기 전까지 모든 클라이언트의 Request를 계속 처리한다는 뜻이며 가이드처럼 10000으로 설정할 경우 각 Child 프로세스가 처리한 Request가 10000건이 되면 해당 Child 프로세스만 재생성된다는 의미이다.

 

그렇기 때문에 타사 사례처럼 1000으로 설정한다면 트랜잭션(Client Request)가 많은 업무에서는 잦은 Child 프로세스 재생성으로 인해 성능 저하가 발생할 수 있다는 뜻이며 10000정도의 값으로 고려해야 할 것 같다.

 

추가적으로 Apache 2.2 문서를 찾아보던 중에 Apache 2.2 문서에서 MaxRequestPerChild 값이 0일 경우 메모리 Leak에 대한 이야기도 언급되고 있기 때문에 구 Apache 버전에서는 튜닝 포인트가 될 수 있을 것으로 보인다.

 https://httpd.apache.org/docs/2.2/en/mod/mpm_common.html#maxrequestsperchild

Setting MaxRequestsPerChild to a non-zero value limits the amount of memory that process can consume by (accidental) memory leakage.

728x90