学无先后,达者为师

网站首页 编程语言 正文

线上nginx偶尔出现502错误

作者:weixin_47561225 更新时间: 2022-10-11 编程语言

周末休息的时候,经理突然发消息来,说服务器崩了,马上打开网站查看,发现部分接口请求的时候,nginx报502错误。登上服务器,查看了nginx错误日志,发现了大量的异常。

no live upstreams while connecting to upstream

 Only one usage of each socket address (protocol/network address/port) is normally permitted) while connecting to upstream

 起初以为是nginx的配置问题,百度了许久,修改了proxy_buffer_size,proxy_buffers 参数,加大了缓存,502问题好像消失了。跟经理说问题解决了,是配置问题。

。。。

没想到第二天一早起床,打开微信一看,一堆消息,说服务器又崩了,和昨天的问题一样,早餐都没吃,赶紧跑去公司。

再次检查nginx错误日志,发现了一个错误记录

 [crit] 31144#87716: *15013 connect() to [::1]:9008 failed (10055: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full) while connecting to upstream

 是说系统缺少足够的缓冲区空间或队列已满,该不会是太多连接到nginx了吧,觉得有可能是websocket长连接的问题,于是把websocket连接暂时关闭,worker_connections参数调大,发现接口变正常了,没有502了。于是跟经理信誓旦旦保证,问题已经解决了。

没想到第三天还是出现了问题,再不解决就要提桶跑路了。

其实这里我进入了一个误区,因为接口返回的是nginx502,以为是nginx的问题,后来,在tomcat的错误日志里,发现了这个问题

Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect

这里已经很明显了,是tcp连接数的问题,连接数满了,无法再建立连接了

服务器使用的是 windows serve 2012R2

使用命令 netsh interface ipv4 show dynamicportrange tcp 查看了端口数发现只开放了少量端口

只需要打开注册表,新增两个参数

找到 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 目录下

新增 MaxUserPort (默认可用端口) 值为 65534

新增 TcpTimedWaitDelay  (tcp恢复时间)值为 30

我这里修改了注册表后,并不需要重启。

然后再次输入命令 netsh interface ipv4 show dynamicportrange tcp

发现端口数改变了。

。。

目前已经观察了半个月,并没有发现出现502错误了。

原文链接:https://blog.csdn.net/weixin_47561225/article/details/127246781

栏目分类
最近更新