아무거나

Apache memory leak과 httpd.conf의 MaxRequestsPerChild 설정 본문

Infra/Apache

Apache memory leak과 httpd.conf의 MaxRequestsPerChild 설정

전봉근 2019. 4. 24. 12:27
반응형

현재 관리 중인 서버들 중 Apache만 설치하여 static resource들만 서비스하는 웹서버들이 있다. 그런데, 이 서버들이 메모리가 조금씩 증가하다가 미리 설정해둔 임계치를 돌파하는 일이 한달 정도 주기로 반복되고 있었다. 단순히 Apache memory leak으로 검색해보니 가장 많이 나오는 이야기가 MaxRequestsPerChild에 대한 설정이었다.

 

MaxRequestsPerChild는 request를 처리할 httpd의 child process가 max 수치에 근접한 개수의 request를 처리하게되면 해당 child process를 재생성하도록 만드는 설정이다. 이 값을 0으로 세팅하면 child process는 죽지않고 계속 request를 처리하게 된다. 따라서 너무 낮은 값을 세팅하면 process를 다시 생성하는 과정이 빠르게 반복될 것이므로 메모리 재할당 처리에 대한 비용이 상승하게 된다. 적절히 높은 값을 설정해야 하는데, 공식적으로 추천하는 값은 없다. Apache2.0 매뉴얼에는 0이 default 이고, 2.2에는 10000이 default 값이라고 한다. 2.4 기준으로는 매뉴얼에 없다. (지원은 하고 있다고 함. 아마 지금과 같은 이슈 때문에 내부적으로 관리하기로 결정하지 않을까 예상해본다.)

우리의 웹서버에는 Apache 2.2를 사용중인데, httpd.conf에 MaxRequestsPerChild 값이 직접 0으로 세팅되어 있었다. 그래서 의심을 품고 한 대의 서버만 설정을 변경하여 모니터링을 해보았다. 먼저 적절한 값을 고민해보았는데, https://www.devside.net/articles/apache-performance-tuning 이 글에서는 하루 동안 들어오는 request 수 정도로 세팅하라고 추천하고 있었다. 그러나 이 경우 너무 높은 수치인 것 같아 우선 2.2기준 default 값인 10000으로 세팅하여 모니터링 해보기로 했다.

 

며칠 후, 다행히 메모리가 증가하다가 어느 시점에 다시 줄어드는 것을 볼 수 있었다. 다만 10000으로 세팅했을 때는 메모리를 얼마 사용하지 않고 바로 process들을 재생성하게되어 서버의 리소스를 제대로 활용하지 못하고 있었다. 우선 위 글에서 추천하는 값인 하루 rquest 수 정도로 세팅해보고 다시 모니터링을 하며 적절한 값을 찾아봐야겠다.

 

출처: http://blog.hanseomgi.com/entry/Apache-memory-leak과-httpdconf의-MaxRequestsPerChild-설정 [야자나무의 일상]

반응형
Comments