2009-11-14 317 views
16

我使用nginx以及fastcgi。我看到很多错误以下错误的记录nginx错误readv()和recv()失败

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

我不使用的应用程序看不出什么问题。这些错误是严重的还是如何摆脱它们。

回答

10

我在后台使用php-fpm,并且缓慢的脚本在所述超时后被杀死,因为它是以这种方式配置的。因此,当连接从php-fpm引擎/进程关闭时,花费比指定时间更长的脚本会被杀死,并且nginx会报告recv或readv错误。

+1

您是否曾经找到一种方法来实际获取PHP错误日志或消息? – Bretticus 2011-04-18 20:48:03

+0

是的php-fpm-慢日志。要启用这个日志,你应该配置php-fpm.conf – rampr 2011-04-19 05:53:24

2

这是一个非常模糊的错误,因为它可能意味着一些事情。关键是要查看所有可能的日志并弄清楚。 在我的情况下,这可能有点独特,我有一个工作的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 /到/插座FPM (PHP 5.3.8)

一旦我使用套接字连接,而不是TCP我开始对这个上行错误上的虚拟主机nginx的启动PHP-FPM(PHP 5.3.8)无论是否使用FPM,任何fastcgi页面都会花费超过x分钟。通常情况下,这是页面在MySQL中执行大型SELECTS,花费大约2分钟才能加载。不好,我知道,但这是因为后端数据库设计。

我做了什么来解决它是在我的虚拟主机配置中添加: fastcgi_read_timeout 5m; 现在可以在nginx全局fastcgi设置中添加它。这取决于你的设置。 http://wiki.nginx.org/HttpFcgiModule

1

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

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

3

关于此错误:

readv() failed (104: Connection reset by peer) while reading upstream and recv() failed (104: Connection reset by peer) while reading response header from upstream

有1更多的情况下我仍然可以看到这一点。 快速设置概述:

  • 的CentOS 5.5
  • PHP与PHP-FPM 5.3。8(从头开始编写一些第三方 模块)
  • Nginx的1.0.5

在PHP-FPM错误日志中寻找,以及和启用catch_workers_output后= YES在php-fpm的池配置,我发现在这种情况下的根本原因实际上是amfext模块(用于Flash的PHP模块)。 有a known bug and fix for this module可以通过更改amf.c文件来纠正。

修复此PHP扩展问题后,上述错误不再是问题。

0

另外它也可能是一个非常简单的问题 - 代码中有一个无限远的cicle,或者是无穷无尽的尝试连接页面上的外部主机。

0

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

为了解决它增加其价值取决于你的网站的请求,例如500

,后必须重新启动

sudo service php5-fpm restart 
0

其他人所说的fastcgi_read_timeout参数的服务,它位于nginx.conf文件中:

http { 
    ... 
    fastcgi_read_timeout 600s; 
    ... 
} 

除此之外,我还有t Ø更改的设置request_terminate_timeout文件中:/etc/php5/fpm/pool.d/www.conf

request_terminate_timeout = 0 

来源的信息(也有一些改变的php.ini参数的其他建议,这在某些情况下可能是相关的):https://ma.ttias.be/nginx-and-php-fpm-upstream-timed-out-failed-110-connection-timed-out-or-reset-by-peer-while-reading/

相关问题