线上nginx偶尔出现502错误

周末休息的时候,经理突然发消息来,说服务器崩了,马上打开网站查看,发现部分接口请求的时候,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

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

发现端口数改变了。

新增 TcpTimedWaitDelay  (tcp恢复时间)值为 30(后来发现此参数需要重启才生效)

或者命令:Set-ItemProperty HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\ -Name TcpTimedWaitDelay -Value 30 -Force

。。

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值