PHP-FPM 进程突然卡住

Posted

技术标签:

【中文标题】PHP-FPM 进程突然卡住【英文标题】:PHP-FPM processes gets stuck out of sudden 【发布时间】:2015-02-07 02:26:45 【问题描述】:

在升级到 php 5.5 时,我遇到了 php-fpm 的问题。

我已经使用新的 PHP 版本创建了一个新的 Web 节点,并且我正在负载均衡器上对其进行登录以在 prod 中对其进行测试。一切正常,直到许多 php-fpm 进程突然卡住(大约 1 小时后)。此后我收到超时。

我已将发行版从 Debian 更改为 Ubuntu,并升级到 PHP 5.5。除此之外,新服务器与以前相同(当一切正常/正常时)。

我已尝试登录两个新的 Web 节点,但它们会同时卡住。 我认为这可能与数据库的突然响应缓慢有关(因为这是他们共享的唯一内容)。

但是,我希望 php-fpm 不要崩溃,所以当数据库再次正常时它会工作。

现在要修复它,我可以重新启动 php-fpm 服务,但这不是一个可靠的计划。

ps aux | grep php 给我看:

root     13919  0.0  0.4 423472 19736 ?        Ss   Dec08   0:10 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 14087  0.0  3.1 474972 127284 ?       S    Dec08   0:54 php-fpm: pool www
www-data 14088  0.0  2.3 446944 94956 ?        S    Dec08   0:50 php-fpm: pool www
www-data 14089  0.1  2.2 443816 92644 ?        S    Dec08   1:03 php-fpm: pool www
www-data 14090  0.0  3.0 474208 124716 ?       S    Dec08   0:44 php-fpm: pool www
www-data 14092  0.0  3.1 478284 129060 ?       S    Dec08   0:41 php-fpm: pool www
www-data 14099  0.0  2.5 459700 105224 ?       S    Dec08   0:14 php-fpm: pool www
www-data 14111  0.0  2.0 439876 84952 ?        S    Dec08   0:06 php-fpm: pool www
www-data 14114  0.0  0.4 427220 18472 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14115  0.0  0.4 427220 18380 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14116  0.0  0.4 427184 18936 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14117  0.0  0.4 427204 18904 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14118  0.0  0.4 427220 18372 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14119  0.0  0.4 427184 18832 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14120  0.0  0.4 427188 18960 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14121  0.0  0.4 427220 18384 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14122  0.0  0.4 427200 18932 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14123  0.0  0.4 427236 18488 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14124  0.0  0.4 427220 18392 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14125  0.0  0.4 427220 18384 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14126  0.0  0.4 427204 18820 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14127  0.0  0.4 427220 18484 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14128  0.0  0.4 427204 18920 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14129  0.0  0.4 427188 18904 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14130  0.0  0.4 427220 18372 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14131  0.0  0.4 427188 18920 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14132  0.0  0.4 427220 18372 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14133  0.0  0.4 427204 18936 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14134  0.0  0.4 427220 18388 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14135  0.0  0.4 427220 18368 ?        S    Dec08   0:00 php-fpm: pool www
www-data 14136  0.0  0.4 427184 18936 ?        S    Dec08   0:00 php-fpm: pool www

您可以看到 24 个进程已经运行了 0 秒(htop 告诉我它大约是 2 毫秒)。他们将永远保持这种状态。全部同时出现。

我的配置:

pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
log_level = debug
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 7
pm.max_requests = 500

另外,我从未在 php-fpm.log 中看到任何内容(只是 NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful

有人吗?

编辑: 我试过同时运行ondemanddynamic 进程管理器

【问题讨论】:

相关:serverfault.com/questions/833968/… 更多信息查看:shubhamjain.co/2015/09/10/… 【参考方案1】:

我无法发表评论,尽管您应该检查与 php 相关的日志文件:

( /var/www/ )

( (hostname)/logs/error_log )

( /var/log/php5-fpm.log )

【讨论】:

/var/log/php5-fpm.log 为空。我的 php 错误日志没有记录任何感兴趣的内容(仅来自我的应用程序的错误)。 在你的 shell 中试试这个:for i in 1..100; do php-fpm ; killall php-fpm; done 嗯,我很容易杀死它们并让它再次工作。我可以重新启动 php-fpm 服务。但它只会帮助我,直到它再次崩溃。我正在寻找发生这种情况的原因。 根据我提到的测试结果,它可能与另一个进程发生冲突。如果您遇到分段错误,那么这可能是罪魁祸首。还可以考虑将 php5-fpm 作为守护进程运行 (ma.ttias.be/a-better-way-to-run-php-fpm) 对不起。我得到:没有找到命令 'php-fpm',你的意思是:来自包 'php5-fpm'(universe)的命令 'php5-fpm' php-fpm:找不到命令 php-fpm:找不到进程。

以上是关于PHP-FPM 进程突然卡住的主要内容,如果未能解决你的问题,请参考以下文章

php-fpm的pool php-fpm慢执行日志 open_basedir php-fpm进程管理

学习php-fpm

php-fpm的pool php-fpm慢执行日志 open_basedir php-fpm进程管理

如何用supervisor守护php-fpm主进程以实现php-fpm的自动重启

如何用supervisor守护php-fpm主进程以实现php-fpm的自动重启

PHP-FPM进程池探秘