PHP-FPM “服务器达到 max_children 设置”的解决办法

最近页面出现“500 Internal Server Error”错误,在 PHP-FPM 错误日志中看到一条记录:

server reached max_children setting (10), consider raising it

研究了一下,解决的办法很简单,需要提高 pm.max_children 的值,我使用的是 Plesk,可以在 PHP 设置里直接修改,那这个值要修改成多少才合适呢?

一般确定 max_children 的值要根据内存大小和每个 PHP-FPM 进程占用的内存来确定,如果你有 4G 内存,留一半给数据库和其他应用的开销,我们给 PHP-FPM 分配 2G 内存。下面语句可以获取每个 PHP-FPM 进程平均占用内存大小:

ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

假如评价每个 PHP-FPM 占用 50M,那就可以把 pm.max_children 的值设置为 40。

如果想更详细了解每个 PHP-FPM 进程占用内存的大小,可以使用以下命令查看:

ps -ylC php-fpm --sort:rss

RSS 列显示的就是每个 PHP-FPM 进程占用内存的大小,单位是 KB。

如果你的 Plesk 托管了多个网站,可能不止一个网站出现这个问题,可以用以下命令查看有多少个域名出现错误日志:

grep -r "服务器已达到 max_children 设置" /var/log/*php*-fpm/error.log | cut -d' ' -f5 | tr -d ']' | sort | uniq -c | sort -nr

扩展阅读

tag 为 Plesk 的文章

Plesk 论坛:AH01071: Got error ‘Unable to open primary script: ( Too many open files )

发表回复

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>