优化PHP-FPM子进程动态管理

如何最优调整 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/

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注