Go nginx 502错误一致,无应用程序错误

Go nginx 502错误一致,无应用程序错误,go,nginx,nginx-config,go-gin,Go,Nginx,Nginx Config,Go Gin,几天前我突然遇到了一个奇怪的问题 我的应用程序已经运行了很长一段时间,没有任何问题。突然间,我开始看到大量的502个错误。我们以每分钟50000个请求的速度运行,平均服务器响应时间为12毫秒 没有应用程序崩溃(错误),nginx config还允许多达10000个工作连接 其他配置 sendfile on; keepalive_timeout 600; server_tokens off; client_max_body_size 20m; 有人能帮我解决问题的方向吗?我得到了

几天前我突然遇到了一个奇怪的问题

我的应用程序已经运行了很长一段时间,没有任何问题。突然间,我开始看到大量的502个错误。我们以每分钟50000个请求的速度运行,平均服务器响应时间为12毫秒

没有应用程序崩溃(错误),nginx config还允许多达10000个工作连接

其他配置

sendfile        on;
keepalive_timeout  600;
server_tokens off;
client_max_body_size 20m;
有人能帮我解决问题的方向吗?我得到了下面的其中一个错误,主要是下面的第一个错误(sendfile())

2019/08/16 15:01:42[错误]30#0:*60729 sendfile()向上游发送请求时失败(32:管道断裂),客户端:,服务器:,请求:“POST HTTP/1.1”,上游:http://127.0.0.1:8080/,主机:“
2019/08/16 15:01:45[错误]30#0:*60821 readv()读取上游时失败(104:由对等方重置连接),客户端:,服务器:,请求:“POST HTTP/1.1”,上游:http://127.0.0.1:8080/,主机:“
2019/08/16 14:55:27[错误]20#0:*42152从上游读取响应头时上游超时(110:连接超时),客户端:,服务器:,请求:“POST HTTP/1.1”,上游:http://127.0.0.1:8080/,主机:“

我们使用的是golang和gin框架,如果它有助于调试的话。

查看每个请求的请求长度,我们发现返回502的请求是那些POST数据大小超过200 KB左右的请求。 所以,我们使用了配置

client_body_buffer_size
并将其值设置为1MB,否则默认情况下最大为2页(64位机器上为16KB)。如果POST数据超过16 KB,它会将数据存储在磁盘上的临时文件中,这会导致额外的I/O延迟。因此,sendfile()失败的错误会立即减少到零。对于我记录的每个请求

$request\u长度

因此,很容易从访问日志中找到所有502及其相应的大小


但是readv()错误仍然很少。

查看每个请求的请求长度,我们发现返回502的请求是POST数据大小超过200 KB左右的请求。 所以,我们使用了配置

client_body_buffer_size
并将其值设置为1MB,否则默认情况下最大为2页(64位机器上为16KB)。如果POST数据超过16 KB,它会将数据存储在磁盘上的临时文件中,这会导致额外的I/O延迟。因此,sendfile()失败的错误会立即减少到零。对于我记录的每个请求

$request\u长度

因此,很容易从访问日志中找到所有502及其相应的大小


但是readv()错误仍然很少。

可能是https重定向问题如果是这样,那么为什么会发生在这样规模的极少数请求(60000中的20-30个)上?可能是https重定向问题如果是这样,那么为什么会发生在这样规模的极少数请求(60000中的20-30个)上?