PHP-FPM ondemand: 활성 하위 항목이 max_children까지 도달하면 PHP 작동이 중지됩니다.

PHP-FPM ondemand: 활성 하위 항목이 max_children까지 도달하면 PHP 작동이 중지됩니다.

내 서버는 10개의 웹사이트를 실행하는데 트래픽이 매우 적습니다. 구성:

  • 우분투 20.04.5 LTS
  • 엔진스 1.18.0(우분투)
  • PHP 7.4.3

~ 안에nginx.conf이것이 추가되었습니다:

        upstream local_php {
                server unix:/run/php/php7.4-fpm.sock;
        }

~ 안에사이트 사용 가능구성 파일에는 다음을 포함한 위치가 있습니다.

        location ~ \.php$ {
                include fastcgi.conf;
                fastcgi_intercept_errors on;
                fastcgi_pass local_php;
                fastcgi_buffers 16 16k;
                fastcgi_buffer_size 32k;
        }

나의/etc/php/7.4/fpm/pool.d/www.conf가지다:

pm = ondemand
pm.max_children = 15
pm.max_requests = 10

이제 내 사이트는 잘 돌아가고 있지만 PHP 로그 파일에는 활동 중인 어린이 수가 꾸준히 증가하고 있는 것으로 나타났습니다. 하루 정도 지나면 15에 도달하고 PHP 작동이 중지됩니다. 과정 목록을 보면, 목적 없이 그냥 살아가는 것처럼 보이는 다양한 '연령'의 아이들이 있습니다. PHP 로그 파일에는 경고가 없으며 다음 경고만 max_children표시됩니다.

WARNING: pid 75057, fpm_pctl_on_socket_accept(), line 518: [pool www] server reached max_children setting (15), consider raising it

나는 PHP 설정을 조정하려고 노력해 왔습니다. 를 사용하면 pm = dynamicmax_children에 훨씬 빠르게 도달합니다. max_requests처음에는 더 높았지만 낮추어도 큰 차이는 없었습니다. max_children조금 늘릴 ​​수 있는 충분한 자원이 있지만 문제를 해결하는 것이 아니라 지연시킬 뿐입니다.

내 서버에는 로드 문제가 없습니다. 메모리 사용량은 35%를 초과하지 않으며 CPU는 5%로 안정적입니다.

제가 뭔가 잘못하고 있는 게 틀림없어요. 왜냐하면 아이들이 언젠가는 죽어야 한다고 생각하기 때문이죠. 그렇죠?PHP 로그에는 아이들이 죽고 있다고 나와 있지만, 이로 인해 활동 중인 아이들이 아닌 여분의 아이들 수가 항상 감소합니다.

DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 2 spare children
DEBUG: pid 232350, fpm_got_signal(), line 82: received SIGCHLD
DEBUG: pid 232350, fpm_event_loop(), line 435: event module triggered 1 events
DEBUG: pid 232350, fpm_children_bury(), line 261: [pool www] child 289966 has been killed by the process management after 12.069386 seconds from start
DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 1 spare children
DEBUG: pid 232350, fpm_got_signal(), line 82: received SIGCHLD
DEBUG: pid 232350, fpm_event_loop(), line 435: event module triggered 1 events
DEBUG: pid 232350, fpm_children_bury(), line 261: [pool www] child 289969 has been killed by the process management after 12.665847 seconds from start
DEBUG: pid 232350, fpm_pctl_perform_idle_server_maintenance(), line 365: [pool www] currently 8 active children, 0 spare children

최대 15명의 하위 항목이 포함된 일반적인 프로세스 목록:

1390 vps@vps9029:/etc/php/7.4/fpm/pool.d $ ps -elf|grep php
4 S root    15528   15439  0  80   0 -  2397 -      Dec20 pts/1 00:00:00 sudo tail -f php7.4-fpm.log
4 S root    15537   15528  0  80   0 -  1378 -      Dec20 pts/1 00:00:12 tail -f php7.4-fpm.log
4 S root    75057       1  0  80   0 - 59077 -      Dec21 ?     00:00:26 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
5 S www-data   94817   75057  0  80   0 - 84357 -   Dec21 ?     00:00:00 php-fpm: pool www
5 S www-data  104885   75057  0  80   0 - 84302 -   Dec21 ?     00:00:00 php-fpm: pool www
5 S www-data  125566   75057  0  80   0 - 66282 -   Dec21 ?     00:00:01 php-fpm: pool www
5 S www-data  143879   75057  0  80   0 - 65617 -   02:47 ?     00:00:00 php-fpm: pool www
5 S www-data  149198   75057  0  80   0 - 84441 -   03:56 ?     00:00:00 php-fpm: pool www
5 S www-data  149632   75057  0  80   0 - 84582 -   04:02 ?     00:00:08 php-fpm: pool www
5 S www-data  152959   75057  0  80   0 - 84515 -   04:43 ?     00:00:01 php-fpm: pool www
5 S www-data  178687   75057  0  80   0 - 65673 -   09:53 ?     00:00:00 php-fpm: pool www
5 S www-data  182987   75057  0  80   0 - 84178 -   10:46 ?     00:00:00 php-fpm: pool www
5 S www-data  187712   75057  0  80   0 - 84178 -   11:44 ?     00:00:00 php-fpm: pool www
5 S www-data  187713   75057  0  80   0 - 84178 -   11:44 ?     00:00:00 php-fpm: pool www
5 S www-data  197529   75057  0  80   0 - 84386 -   13:59 ?     00:00:00 php-fpm: pool www
5 S www-data  210404   75057  0  80   0 - 65569 -   16:48 ?     00:00:00 php-fpm: pool www
5 S www-data  213858   75057  0  80   0 - 65633 -   17:29 ?     00:00:00 php-fpm: pool www
5 S www-data  214975   75057  0  80   0 - 85465 -   17:44 ?     00:00:00 php-fpm: pool www

답변1

원인은 설치된 사이트 중 하나의 요청이 느리기 때문입니다.

하위 프로세스의 라이브를 제어하는 ​​FPM/NGINX 설정이 꽤 있습니다. 현재 내 설정은 다음과 같습니다. 아이들을 통제할 수 있는 것 같습니다.

안에 /etc/php/7.4/fpm/pool.d/www.conf:

pm = ondemand
pm.max_requests = 10
pm.max_children = 15
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s
  • request_terminate_timeout_track_finished = 예

안에 /etc/php/7.4/fpm/php.ini:

max_execution_time = 30
default_socket_timeout = 60

안에 /etc/nginx/nginx.conf:

keepalive_timeout 55;
fastcgi_read_timeout 60;

관련 정보