如何最优调整 pm.max_children 的值,本文只讨论非 CPU 密集计算下的情况
问题:
[04-Jul-2019 18:54:07] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
[04-Jul-2019 18:57:53] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
很明显,php-fpm.log 告警说 pm.max_children 设置是5,子进程已经跑满了,请考虑扩大下
解决:
我们需要根据系统上的内存量来计算和更改这些值,打开 php-fpm.conf
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
以下命令将帮助我们确定每个(PHP-FPM)子进程使用的内存
ps -ylC php-fpm --sort:rss
RSS列显示PHP-FPM进程的非交换物理内存使用量(以 kb 为单位)
公式:
pm.max_children = 要分配给php-fpm的总内存 / 子进程最大占用内存或平均内存
您可以使用这个方便的命令计算 PHP-FPM 进程平均内存使用情况
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
参考翻译:
https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/