我沿着使用nginx和fastcgi。当阅读上游时readv()失败(104:由对等端重置连接),当从上游阅读响应报头时recv()失败(104:由对等端重置连接我没有看到任何问题使用的应用程序。这些错误是否严重或如何摆脱他们。
cfh9epnr1#
我在后台使用php-fpm,在超时后,慢脚本会被杀死,因为它是这样配置的。因此,超过指定时间的脚本会被杀死,nginx会在连接从php-fpm引擎/进程关闭时报告recv或readv错误。
nfeuvbwi2#
从nginx版本1.15.3开始,你可以通过将上游的keepalive_requests选项设置为与php-fpm的pm.max_requests相同的数字来解决这个问题:
upstream name { ... keepalive_requests number; ... }
字符串
如果您使用nginx连接到php-fpm,一个可能的原因也可能是nginx的fastcgi_keep_conn参数设置为on(特别是如果您在php-fpm中设置了低pm.max_requests):
http|server|location { ... fastcgi_keep_conn on; ... }
型这可能会导致每次php-fpm的子进程重新启动时所描述的错误(由于到达pm.max_requests),而nginx仍然连接到它。为了测试这一点,将pm.max_requests设置为一个非常低的数字(如1),看看是否会出现更多的上述错误。修复非常简单-只需停用fastcgi_keep_conn:
fastcgi_keep_conn off;
型或者完全删除该参数(因为默认值是off)。这意味着你的nginx将在每次请求时重新连接到php-fpm,但是如果你在同一台机器上同时拥有nginx和php-fpm并且通过unix socket连接,那么性能影响可以忽略不计。
0s7z1bwu3#
关于这个错误:当阅读上游时readv()失败(104:由对等端重置连接),当从上游阅读响应报头时recv()失败(104:由对等端重置连接还有1个案例,我仍然可以看到这一点。快速设置概述:
在查看了PHP-FPM错误日志并在php-fpm池配置中启用catch_workers_output = yes之后,我发现这种情况下的根本原因实际上是amfext模块(Flash的PHP模块)。在修复了这个PHP扩展问题之后,上面的错误不再是一个问题。
xxe27gdn4#
这是一个非常模糊的错误,因为它可能意味着几件事。关键是要查看所有可能的日志并找出它。在我的情况下,这可能有点独特,我有一个工作nginx + php / fastcgi配置.我想编译一个新的更新版本的PHP与PHP-FPM和我都这么做了,原因是我在一个实时服务器上工作,不能承受停机时间,所以我必须升级并尽可能无缝地迁移到PHP-FPM。所以我有两个PHP示例。
一旦我在nginx vhost上使用套接字连接而不是TCP启动PHP-FPM(PHP 5.3.8),我开始在任何fastcgi页面上获得此上游错误,无论他们是否使用FPM,都需要超过x分钟。通常情况下,在mysql中执行大型SELECT的页面需要大约2分钟加载。我知道这很糟糕,但这是因为后端DB设计。我所做的就是在我的vhost配置中添加这个:**fastcgi_read_timeout 5 m;**现在这也可以添加到nginx全局fastcgi设置中。这取决于你的设置。http://wiki.nginx.org/HttpFcgiModule
aor9mmx15#
答案#2.有趣的是fastcgi_read_timeout 5 m;为我修复了一个vhost。然而,我仍然在另一个vhost中得到错误,只需运行phpinfo();对我来说,解决这个问题的方法是复制一个默认的生产php.ini文件,并将我需要的配置添加到其中。我所拥有的是以前PHP安装中的php.ini的旧副本。只是添加了我需要的扩展和配置,这解决了我的问题,我不再有nginx错误readv()和recv()失败。我希望这两个补丁中的一个能帮助到别人。
mo49yndu6#
它也可以是一个非常简单的问题-在您的代码中的某个地方有一个无限循环,或者一个无限试图连接您的页面上的外部主机。
vatpfxk57#
其他人提到了fastcgi_read_timeout参数,它位于nginx.conf文件中:
http { ... fastcgi_read_timeout 600s; ... }
字符串除此之外,我还必须更改文件中的设置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/
eeq64g8w8#
有时这个问题是因为请求太多而发生的。默认情况下,php5-fpm中的pm.max_requests可能是100或更低。要解决它增加其价值取决于您的网站的要求,例如500.之后,您必须重新启动服务
pm.max_requests
sudo service php5-fpm restart
mepcadol9#
我也遇到了同样的问题。我还检查了/var/log/php8.1-fpm.log,发现:
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
字符串所以我增加了pm. max_children和pm. max_requests:
pm.max_children = 50 pm.max_requests = 500
型这很有帮助!
9条答案
按热度按时间cfh9epnr1#
我在后台使用php-fpm,在超时后,慢脚本会被杀死,因为它是这样配置的。因此,超过指定时间的脚本会被杀死,nginx会在连接从php-fpm引擎/进程关闭时报告recv或readv错误。
nfeuvbwi2#
更新:
从nginx版本1.15.3开始,你可以通过将上游的keepalive_requests选项设置为与php-fpm的pm.max_requests相同的数字来解决这个问题:
字符串
原始答案:
如果您使用nginx连接到php-fpm,一个可能的原因也可能是nginx的fastcgi_keep_conn参数设置为on(特别是如果您在php-fpm中设置了低pm.max_requests):
型
这可能会导致每次php-fpm的子进程重新启动时所描述的错误(由于到达pm.max_requests),而nginx仍然连接到它。为了测试这一点,将pm.max_requests设置为一个非常低的数字(如1),看看是否会出现更多的上述错误。
修复非常简单-只需停用fastcgi_keep_conn:
型
或者完全删除该参数(因为默认值是off)。这意味着你的nginx将在每次请求时重新连接到php-fpm,但是如果你在同一台机器上同时拥有nginx和php-fpm并且通过unix socket连接,那么性能影响可以忽略不计。
0s7z1bwu3#
关于这个错误:
当阅读上游时readv()失败(104:由对等端重置连接),当从上游阅读响应报头时recv()失败(104:由对等端重置连接
还有1个案例,我仍然可以看到这一点。快速设置概述:
在查看了PHP-FPM错误日志并在php-fpm池配置中启用catch_workers_output = yes之后,我发现这种情况下的根本原因实际上是amfext模块(Flash的PHP模块)。
在修复了这个PHP扩展问题之后,上面的错误不再是一个问题。
xxe27gdn4#
这是一个非常模糊的错误,因为它可能意味着几件事。关键是要查看所有可能的日志并找出它。在我的情况下,这可能有点独特,我有一个工作nginx + php / fastcgi配置.我想编译一个新的更新版本的PHP与PHP-FPM和我都这么做了,原因是我在一个实时服务器上工作,不能承受停机时间,所以我必须升级并尽可能无缝地迁移到PHP-FPM。
所以我有两个PHP示例。
一旦我在nginx vhost上使用套接字连接而不是TCP启动PHP-FPM(PHP 5.3.8),我开始在任何fastcgi页面上获得此上游错误,无论他们是否使用FPM,都需要超过x分钟。通常情况下,在mysql中执行大型SELECT的页面需要大约2分钟加载。我知道这很糟糕,但这是因为后端DB设计。
我所做的就是在我的vhost配置中添加这个:**fastcgi_read_timeout 5 m;**现在这也可以添加到nginx全局fastcgi设置中。这取决于你的设置。http://wiki.nginx.org/HttpFcgiModule
aor9mmx15#
答案#2.有趣的是fastcgi_read_timeout 5 m;为我修复了一个vhost。然而,我仍然在另一个vhost中得到错误,只需运行phpinfo();对我来说,解决这个问题的方法是复制一个默认的生产php.ini文件,并将我需要的配置添加到其中。我所拥有的是以前PHP安装中的php.ini的旧副本。只是添加了我需要的扩展和配置,这解决了我的问题,我不再有nginx错误readv()和recv()失败。
我希望这两个补丁中的一个能帮助到别人。
mo49yndu6#
它也可以是一个非常简单的问题-在您的代码中的某个地方有一个无限循环,或者一个无限试图连接您的页面上的外部主机。
vatpfxk57#
其他人提到了fastcgi_read_timeout参数,它位于nginx.conf文件中:
字符串
除此之外,我还必须更改文件中的设置request_terminate_timeout:/etc/php5/fpm/pool.d/www.conf
型
信息来源(也有一些其他的修改php.ini参数的建议,在某些情况下可能是相关的):https://ma.ttias.be/nginx-and-php-fpm-upstream-timed-out-failed-110-connection-timed-out-or-reset-by-peer-while-reading/
eeq64g8w8#
有时这个问题是因为请求太多而发生的。默认情况下,php5-fpm中的
pm.max_requests
可能是100或更低。要解决它增加其价值取决于您的网站的要求,例如500.
之后,您必须重新启动服务
字符串
mepcadol9#
我也遇到了同样的问题。我还检查了/var/log/php8.1-fpm.log,发现:
字符串
所以我增加了pm. max_children和pm. max_requests:
型
这很有帮助!