nginx-转发tomcat出现502/504错误修复

收到实施小组对现场的反馈。3天时间内,不间断的出现502错误。问题出现的时间和情况并不固定。在第3天时间出现了长达5分钟的502异常问题,以下是进行排查的过程。(最终结果有点奇葩)

推测一:nginx服务器负载过高

登入服务器检查nginx,发现整体服务器负载正常。内存和CPU均未出现过高情况,但是在查看进程中发现有4个is shutting down的nginx进程。
采用nginx重启的方式消除了4个is shutting down的进程但是还是存在问题,通过百度发现4个奇怪的进程是由于重新加载nginx配置导致的,指令如下:

#查看nginx进程
ps -aux | grep nginx

#关闭nginx
cd /usr/local/nginx/sbin
./nginx -s stop

#启动nginx
./nginx -s reload

推测二:nginx默认使用http1.0协议无法支持keepalive(有人通过这个配置可以解决)

再往上找资料发现,nginx默认使用的http1.0协议,tomcat默认的是http1.1,需要在转发时修改配置添加以下代码:

location / {
                        proxy_pass http://.......;
                        proxy_redirect ~^http://([^:]+)(:\d+)?(.*)$  https://$1$3;
                        ##添加下两行代码
                        proxy_http_version 1.1; 
                        proxy_set_header Connection "";
                        ##下面的配置根据实际需要
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-Proto https;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

推测三:网络故障

检查服务器网络发现,在出现502错误的时候,通过nginx所在机器telnet对应服务的端口时断时续,感觉问题就是在网络上。于是赶紧联系服务器管理方,最后进过排查无问题。
此处需要告诉大家,在telnet服务时候如果不通不要着急断定,可以先通过ping或者ssh试一下。【丢脸丢大了】

实际情况:

最后检查发现是目标服务器上的tomcat的内存占用过高。检查服务器发现配置为4U8G的服务器,tomcat配置为8G,直接顶配了。一开始没怀疑这个问题是因为跟踪日志一直不报内存溢出,服务还能时断时续的运行,完全没有怀疑是tomcat的问题。
然后将服务器内存将配,重启后恢复正常。

推测可能性

tomcat内存占用过高,系统没有主动杀死应用进程,但是应用占用了系统的运行空间,导致饮用通道堵塞,双方应该在争抢资源。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬓白方悟少年非

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值