질문/조언팁/리소스 공유

서버 운영하다보면 php-fpm이 주기적으로 다운되는 경우가 있습니다.

xe등 응용프로그램 또는 여러가지 이유로 메모리 누수(memory leak)이 발생하기 때문입니다.

php-fpm에는 관련 사항에 대비하기 위한 pm.max_requests 이란 설정 항목이 있습니다.

기본값은 0 으로 reload, restart하기까지는 프로세스는 계속 유지됩니다.

따라서 메모리누수가 누적되어 결국 다운되게 됩니다.

pm.max_requests = 500 으로 설정한다면 각 프로세스가 500번 request를 처리하면 프로세스를 죽이고 새로 생성합니다.

너무 작은 값으로 설정하면 cpu사용량이 많아지고 너무 크면 다운될 수 있으니 서버 환경에 적당한 값으로 설정하십시오.

출처 : https://phiz.kr/hosting/10265

 

apache에도 같은 설정이 있습니다.

MaxRequestsPerChild

 

 

 

글쓴이 휘즈

profile
XE에 최적화된 서버를 구축, 유지보수해 드립니다.
보안서버(ddos방어, spam방지) 설치 세팅해드립니다.
보안 서버는 다음 과 같은 작업을 합니다.
- 커널 세팅
- 방화벽 설정
- WAF 설치 및 설정
- XE 전용 룰 세팅
  • ?
    우오오 감사해영
  • profile

    최근 PHP 기준으로, 잡다한 pecl 확장모듈을 많이 설치하지 않는다면 메모리 누수는 거의 문제가 되지 않는 것 같습니다. pm.max_requests를 10000이나 100000으로 해놓아도 메모리가 부족해서 뻗는 일은 (적어도 지난 몇 년간은) 보지 못했어요.

    물론 pm.max_requests를 줄이는 것도 한 번 시도해 볼 만한 방법이기는 하지만, 실제로 메모리가 부족했던 것이 맞는지 시스템 로그를 참고하여 정확하게 파악하는 것이 더 중요합니다. 메모리가 부족했다면 Out of memory라고 분명히 로그가 남거든요. 진찰도 해보지 않고 약만 먹는 꼴이 될 수 있습니다. 또한 PHP-FPM 프로세스의 메모리 사용량이 늘어나더라도 누수가 아니라 opcache나 apc 등의 캐시 기능이 원래 설정한 만큼의 메모리를 쓰고 있는 것일 수도 있습니다.