nginx错误readv()和recv()失败

我使用nginxfastcgi一起。 我在错误日志中看到很多以下错误

readv()在读取上行stream时失败(104:由对等方重置连接),从上游读取响应报头时recv()失败(104:由对等方重置连接)

我没有看到使用该应用程序的任何问题。 这些错误是严重的还是如何摆脱它们。

我在后台使用php-fpm,慢速脚本在超时之后死机,因为它是这样配置的。 因此,比指定时间更长的脚本将被终止,并且当连接从php-fpm引擎/进程关闭时,nginx会报告recv或readv错误。

关于这个错误:

readv()在读取上行流时失败(104:由对等方重置连接),从上游读取响应报头时recv()失败(104:由对等方重置连接)

还有一个我仍然可以看到的情况。 快速设置概述:

  • CentOS 5.5
  • PHP与PHP-FPM 5.3.8(从头开始编译一些第三方模块)
  • Nginx 1.0.5

在查看PHP-FPM错误日志以及在php-fpm池配置中启用catch_workers_output = yes后,我发现在这种情况下的根本原因实际上是amfext模块(用于Flash的PHP模块)。 这个模块有一个已知的bug和修正 ,可以通过改变amf.c文件来纠正。

解决这个PHP扩展问题后,上面的错误不再是一个问题。

这是一个非常模糊的错误,因为它可能意味着一些事情。 关键是看看所有可能的日志,并找出它。 在我的情况下,这可能有点独特,我有一个工作的nginx + PHP / fastcgi配置。 我想用PHP-FPM编译一个新的PHP更新版本,我这样做了。 原因是我在一个无法承受停机时间的现场服务器上工作。 所以我不得不升级到PHP-FPM,尽可能无缝地升级。

所以我有2个PHP实例。

  • 1直接和fastcgi交谈(PHP 5.3.4) – 使用TCP / 127.0.0.1:9000(PHP 5.3.4)
  • 1用PHP-FPM配置 – 使用Unix套接字 – unix:/ dir / to / socket-fpm(PHP 5.3.8)

一旦我在一个nginx虚拟主机上使用套接字连接而不是TCP启动了PHP-FPM(PHP 5.3.8),我开始在fastcgi页面上获取这个上游错误的时间超过x分钟,不管他们是否使用FPM。 通常情况下,这是页面在mysql中执行大型SELECTS,花费大约2分钟。 不好,我知道,但这是因为后端数据库设计。

我所做的修复是在我的虚拟主机配置中加入: fastcgi_read_timeout 5m; 现在可以在nginx全局fastcgi设置中添加。 这取决于你的设置。 http://wiki.nginx.org/HttpFcgimodulee

有趣的是fastcgi_read_timeout 5m; 为我修了一个虚拟主机。 但是,我仍然在另一个虚拟主机,只是通过运行phpinfo(); 这对我来说是固定的,通过复制一个默认的生产php.ini文件,并添加我需要的配置。 我的是从以前的PHP安装我的php.ini旧副本。 一旦我把默认的php.ini从'shared'添加到我需要的扩展和配置中,这就解决了我的问题,不再有nginx错误readv()和recv()失败。

我希望这两个修复程序中的一个可以帮助某人。

也可能是一个非常简单的问题 – 代码中有一个无限的空间,或者是一个无穷无尽的连接外部主机的页面。

有时候这个问题是由于大量的请求而发生的。 默认情况下,php5-fpm中的pm.max_requests可能是100或更低。

为了解决它的价值取决于你的网站的要求,例如500。

之后,你必须重新启动服务

 sudo service php5-fpm restart