nginx – PHP-FPM停止响应并死亡

前端之家收集整理的这篇文章主要介绍了nginx – PHP-FPM停止响应并死亡前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在1GB单核VPS上使用Nginx 1.5.1和PHP-FPM(PHP 5.3.26)运行Drupal 6,在SSD存储上有3GB的交换空间.我刚刚从共享主机切换到这个非托管VPS,因为我的网站太重了,所以我还在学习绳索.我的流量中等,我并没有真正监控它,但谷歌Adsense通常每天记录接近30K的页面浏览量.我通常有50到80个经过身份验证的用户登录,还有几百个匿名用户在任何给定时刻点击Boost静态HTML缓存.

我遇到的问题是PHP-FPM经常停止响应,导致Nginx 502或504错误.我发誓我已经阅读了互联网上关于这个问题的每一页,这似乎相当普遍,我尝试了无数的配置组合,我找不到一个好的解决方案.重新启动NginxPHP-FPM后,该网站运行一段时间非常快,然后在没有警告的情况下它只是停止响应.当浏览器在服务器上等待时,我得到一个白色屏幕,大约30秒到一分钟后,它会抛出Nginx 502或504错误.有时它运行2分钟,有时5分钟,有时5小时,但它总是最终挂起.当我发现服务器处于这种状态时,仍然有足够的可用内存(> 500MB或更多)并且没有主要的cpu使用,控制和工作者PHP-FPM进程仍然存在,并且服务器仍然可以ping通并且可以通过SSH.通过init脚本重新加载PHP-FPM会再次重新启动它.挂起似乎与流量的数量不对应,因为当我在开发VPS上测试此配置而根本没有流量时,我一直观察到这种行为.

我一直在调整设置,但我不能明确地消除这个问题.我将Nginx工作者设置为1.在PHP-FPM配置中,我尝试了所有三个流程管理器. “动态”绝对是最不可靠的,仅在几分钟后就会一直挂起. “静态”也是不可靠和不可预测的.最少的车一直是“按需”,但即便如此,有时也会让我失望,有时会在12到24小时之后.但我无法让服务器无人看管,因为PHP-FPM会死掉而且永远不会自行回归.我尝试将pm.max_children值从低至3调整到高达50,并没有太大的区别,但我目前在10处.备用服务器值也是如此.我也将pm.max_requests设置在从30到无限制的任何地方,它似乎没有什么区别.

我也一直在使用APC和Redis缓存来减轻数据库的负担,但是在激活和不激活这些机制的情况下都存在PHP-FPM问题.

根据日志,PHP-FPM进程不会退出SIGSEGV或SIGBUS,而是退出SIGTERM.我得到了很多像:

WARNING: [pool www] child 3739,script '/var/www/drupal6/index.PHP' (request: "GET /index.PHP") execution timed out (38.739494 sec),terminating

和:

WARNING: [pool www] child 3738 exited on signal 15 (SIGTERM) after 50.004380 seconds from start

实际上,我发现有几篇文章建议每隔几分钟或几小时通过cron优雅地重新加载PHP-FPM以避免这个问题.这就是我所做的,“/etc/init.d/PHP-fpm reload”每5分钟一次.到目前为止,它一直在关灯.但这感觉就像一个可怕的黑客. PHP-FPM真的不可靠吗?还有什么我可以做的吗?非常感谢!

最佳答案
您是否尝试过其他优化工具,或者您是否尝试过使用apc.filter?
这听起来像是与APC相关的问题,因为APC的稳定性总是取决于所使用的代码和apc配置.
原文链接:https://www.f2er.com/nginx/435366.html

猜你在找的Nginx相关文章