Nginx 메모리가 미친듯이 급증하기 시작했다

며칠 전부터 서버 메모리가 미친듯이 부족하기 시작하더니, 스왑의 80%이상을 이미 점유하고 있는 것을 발견하였다. 이것때문에 서버가 다운되어서 원인을 찾느라 엄청난 뻘짓을 하였지만 다행히도 간단한 서버 설정 문제로 해결할 수 있었다. 일단 ps -ef 를 사용하였더니… 아래와 같이 미친듯이 프로세스가 번식한것을 확인 할 수 있었는데, 처음에는 Nginx 를 의심하지 않고 워드프레스의 캐시 플러그인이 문제라고 생각했다.(타이밍이 절묘하게도 딱 캐시 설치 이후에 느려졌다.)

    9510  9509  1 19:47 ?        00:00:32 php-fpm: pool www
    9511  9509  1 19:47 ?        00:00:30 php-fpm: pool www
    9512  9509  1 19:47 ?        00:00:35 php-fpm: pool www
    9513  9509  0 19:47 ?        00:00:19 php-fpm: pool www
    9514  9509  0 19:47 ?        00:00:20 php-fpm: pool www
    9520  9509  1 19:47 ?        00:00:33 php-fpm: pool www
    9554  9509  1 19:48 ?        00:00:33 php-fpm: pool www
    9639  9509  0 19:50 ?        00:00:16 php-fpm: pool www
    9640  9509  1 19:50 ?        00:00:30 php-fpm: pool www
    9642  9509  0 19:50 ?        00:00:20 php-fpm: pool www
    9647  9509  0 19:50 ?        00:00:18 php-fpm: pool www
   10277  9509  1 20:05 ?        00:00:20 php-fpm: pool www
   10425  9509  1 20:10 ?        00:00:19 php-fpm: pool www
   10441  9509  0 20:10 ?        00:00:06 php-fpm: pool www
   10442  9509  1 20:10 ?        00:00:21 php-fpm: pool www
   10446  9509  1 20:11 ?        00:00:19 php-fpm: pool www
   10456  9509  1 20:11 ?        00:00:16 php-fpm: pool www
   10468  9509  1 20:11 ?        00:00:15 php-fpm: pool www
   10469  9509  1 20:11 ?        00:00:16 php-fpm: pool www
   10470  9509  1 20:11 ?        00:00:13 php-fpm: pool www
   10730 10729  0 20:18 ?        00:00:01 nginx: worker process                   
   10829  9509  0 20:21 ?        00:00:02 php-fpm: pool www
   10839  9509  2 20:21 ?        00:00:11 php-fpm: pool www
   10840  9509  2 20:21 ?        00:00:10 php-fpm: pool www
   10844  9509  3 20:21 ?        00:00:15 php-fpm: pool www
   10878  9509  0 20:22 ?        00:00:00 php-fpm: pool www
   10880  9509  0 20:22 ?        00:00:00 php-fpm: pool www

하지만 Nginx 메모리가 요동친 이유는 캐시의 문제가 아니라 기본 설정을 그대로 사용한 것이 문제였는데 php-fpm 연동해서 사용할시 php-fpm의 설정을 건드려 줘야 하는것을 난 몰랐다 ㅠㅠ php-fpm의 서버 설정을 아래와 같이 바꾸어 재시작 하니 제대로 시작 되었다. 아래의 설정은 각자 서버에 맞게 최적화 하도록 하자.(해외 사이트를 참고하여 문제를 해결 할수 있었다. 땡큐땡큐!)

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 3

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 2

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 6
  • 일단 위와 같은 설정으로 해결할 수는 있었지만 결국 난 서버 메모리를 업그레이드 했다. 이유는 안정성 때문인데 서버를 적게 띄우면 되긴 하지만 여러가지를 고려했을때 맘편히 메모리 증설을 하는게 좋다고 생각했다.