Nginx + php-fpm-recv() 错误

Nginx + php-fpm-recv() 错误

我在 nginx 日志中收到以下错误

[错误] 17734#0:*6643 recv() 失败(104:对等方重置连接)从上游读取响应标头时,客户端:[cut],服务器:[cut],请求:“GET /venues HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“[cut]”

我有一个专用的盒子,有 8 GB 内存和四核芯片。服务器不错。Nginx、php-fpm 和 mysql 都是最新版本,在 ubuntu 10.04 下运行

只有在使用 siege 对服务器进行压力测试时才会出现这种情况。如果我将并发连接数增加到 100,则最多有 20% 的请求会失败。

此外,在没有 mysql 查询的页面上我没有遇到这种情况。只有查询数量适中的页面上才出现几次失败。不过,我不确定这是否与此有关。

我感觉这与 php 有关。但我搞不懂。

关于从哪里开始寻找,有什么建议吗?

更新:php 错误日志没有任何内容。没有任何出错记录

答案1

很可能您用完了 php-fpm 工作进程。日志没有显示任何内容,因为代码本身没有问题 - 工作进程只是忙于处理您的请求。如果您在没有 MySQL 查询的页面上没有看到此信息,则瓶颈在于 MySQL DB。您应该识别长时间运行的查询(使用mytop慢速日志功能或围绕 SQL 处理的一些自定义 PHP 日志记录)并对其进行优化。当然,“长查询”在高负载的世界中实际上相当短。即使是 200 毫秒的查询也足以让您的服务器瘫痪。

答案2

这可能会得到解决。我报告了在几乎没有负载的情况下打开和重用持久 TCP 套接字的类似问题。现在 git 中有一个针对此问题的补丁:

https://groups.google.com/forum/#!topic/highload-php-en/qGu3Eaifj9s

相关内容