Nginx + php-fpm 随机挂起

Posted

技术标签:

【中文标题】Nginx + php-fpm 随机挂起【英文标题】:Nginx + php-fpm random hang 【发布时间】:2017-09-18 06:21:45 【问题描述】:

我有一个使用 Codeigniter 制作的网站,在带有 nginxphp-FPM 的 Ubuntu 上运行。 它一直运行良好,直到昨晚,当它开始加载页面非常缓慢时,有时会给出 504,有时会快速加载页面。

如果我重新启动 nginx 或 php-fpm,站点可以正常工作 20-30 秒,然后问题再次出现。

这是 nginx 错误日志的内容:

[错误] 25226#25226:*65 上游超时(110:连接超时 out) 从上游读取响应头时,客户端:X.X.X.X, 服务器:www.mydomain.ext,请求:“GET / HTTP/1.1”,上游: “fastcgi://unix:/var/run/php/php5.6-fpm.sock:”,主机: "www.mydomain.ext"

在过去的几个小时里,我一直在谷歌上搜索和玩弄 nginx 和 php-fpm 配置,但我无法解决它。

有人知道如何帮助我吗?

【问题讨论】:

您的应用程序是否与数据库交互?由于无法连接到我的数据库服务器,或者查询的完成时间比 fpm 进程的 max_execution_time 更长,我之前收到过此消息。 【参考方案1】:

在我看来,这似乎是 FPM 流程管理的问题。有关更多信息,请参阅此link。似乎您有可用于 php-fpm 的静态进程数,并且流量超过了它。我遇到了类似的问题,但我不记得这是否是当时的确切错误消息。但是行为就像你解释的那样,一些连接真的很慢(等待 fpm?)其他的会到 504。

更新: 要确认我的理论,您应该检查文件 /etc/php5.6/pool.d/www.conf 并检查这一行:

pm.max_children = X

增加数字并重新启动 fpm。然后看看问题是否解决了。

【讨论】:

【参考方案2】:

尝试如下修改你的配置:

pm = ondemand
pm.max_children = 200
pm.process_idle_timeout = 1s
pm.max_requests = 1000

重启fpm,你的问题应该解决了。

【讨论】:

以上是关于Nginx + php-fpm 随机挂起的主要内容,如果未能解决你的问题,请参考以下文章

高负载下的 502 网关错误 (nginx/php-fpm)

php-fpm 进程数的设定

在 PHP 5.4 中设置 PHP-FPM

php-fpm死机解决办法,脚本后台自动重启

从apache mod_php到php-fpm[转]

docker 部署nginx、php-fpm错误记录