안녕하세요.
VPS하나에 작은 웹사이트 여러개를 운영하고 있습니다.
ubuntu 20.04 + Nginx + php7.4 + mariadb 10.4 구성을 사용하고 있습니다만..
얼마전에 웹사이트가 속도가 엄청나게 느려져 로그를 확인해보니, php 로그에
server reached pm.max_children setting (30), consider raising it 에러가 다수 찍혀 있는걸 보았습니다.
그런데 트래픽 양은 딱히 차이가 없었습니다만.... 왜 그런 오류가 뜬건지 잘 모르겠습니다 ;;
혹시 pm.max_children 값을 변경하지 않고, Nginx에서 설정할 수 있는 keepalive_timeout 이나 client_body_timeout 값을 줄이면 줄이면 pm.max_children 문제 해결에도 도움이 되는지 궁금합니다.
감사합니다.
1. pm.max_children을 늘려보라는 메시지는 무시하셔도 됩니다.
2. 오랫동안 프로세스를 점유하고 있는 스크립트가 있으면 다른 요청을 처리할 수 있는 프로세스가 고갈되어서 문제가 되는 것은 사실이죠.
3. 특정 PHP 스크립트의 실행 시간을 가장 확실하게 제한할 수 있는 설정은 php.ini의 max_execution_time과 PHP-FPM pool 설정파일의 request_terminate_timeout입니다. 시간을 많이 잡아먹는 PHP 스크립트 자체를 죽여버리기 때문에, 그냥 nginx에서 연결만 끊는 것보다 더 직접적이지요. nginx가 연결을 끊어도 PHP는 계속 돌아가면서 프로세스를 점유할 수 있으니까요. (아파치 시절에는 ignore_user_abort 등의 방법으로 이 부분을 컨트롤할 수 있었지만, PHP-FPM에서는 잘 안 통합니다. 앞단에서 연결을 끊어도 10분이고 20분이고 계속 돌아가요.)