Nginx 메모리 점유현상
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
- 일단 위와 같은 설정으로 해결할 수는 있었지만 결국 난 서버 메모리를 업그레이드 했다. 이유는 안정성 때문인데 서버를 적게 띄우면 되긴 하지만 여러가지를 고려했을때 맘편히 메모리 증설을 하는게 좋다고 생각했다.