我使用nginx和fastcgi.我在错误日志中看到了很多以下错误
readv()失败(104:通过对等方连接重置),同时从上游读取响应头,同时读取上游和recv()失败(104:由对等方重置连接)
我没有看到使用该应用程序的任何问题.这些错误是严重的还是如何摆脱它们.
ram*_*mpr 11
我在后台使用php-fpm,慢速脚本在超时之后被杀死,因为它是以这种方式配置的.因此,当从php-fpm引擎/进程关闭连接时,超过指定时间的脚本将被终止并且nginx将报告recv或readv错误.
小智 5
关于这个错误:
读取上游时 readv() 失败(104:对等方重置连接),从上游读取响应标头时 recv() 失败(104:对等方重置连接)
还有 1 个案例我仍然可以看到这一点。快速设置概述:
在查看 PHP-FPM 错误日志并在 php-fpm 池配置中启用catch_workers_output = yes后,我发现这种情况的根本原因实际上是 amfext 模块(Flash 的 PHP 模块)。该模块有一个已知的错误和修复,可以通过更改 amf.c 文件来纠正。
修复此 PHP 扩展问题后,上述错误不再是问题。
从 nginx 版本 1.15.3 开始,您可以通过将上游的keepalive_requests选项设置为与 php-fpm 的pm.max_requests相同的数字来解决此问题:
upstream name {
...
keepalive_requests number;
...
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 nginx 连接到 php-fpm,一个可能的原因也可能是将 nginx 的fastcgi_keep_conn参数设置为on(特别是如果您在 php-fpm 中的pm.max_requests设置较低):
http|server|location {
...
fastcgi_keep_conn on;
...
}
Run Code Online (Sandbox Code Playgroud)
这可能会导致每次 php-fpm 的子进程重新启动(由于达到pm.max_requests)而 nginx 仍然连接到它时所描述的错误。要对此进行测试,请将pm.max_requests设置为一个非常低的数字(例如1),然后查看是否会出现更多上述错误。
修复很简单 - 只需停用fastcgi_keep_conn:
fastcgi_keep_conn off;
Run Code Online (Sandbox Code Playgroud)
或者完全删除参数(因为默认值是off)。这确实意味着您的 nginx 将在每次请求时重新连接到 php-fpm,但如果您在同一台机器上同时安装 nginx 和 php-fpm 并通过 unix socket 连接,则性能影响可以忽略不计。
归档时间: |
|
查看次数: |
39723 次 |
最近记录: |