Nginx + php-fpm 随机挂起
Posted
技术标签:
【中文标题】Nginx + php-fpm 随机挂起【英文标题】:Nginx + php-fpm random hang 【发布时间】:2017-09-18 06:21:45 【问题描述】:我有一个使用 Codeigniter 制作的网站,在带有 nginx 和 php-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 随机挂起的主要内容,如果未能解决你的问题,请参考以下文章