while(true)引发的Dubbo应用假死

博客讲述了由于while(true)导致的Dubbo服务端假死问题,表现为客户端调用超时、No provider异常。服务端permgen和heap区域内存迅速耗尽,引发长时间的Full GC,最终导致OOM。分析发现,服务实现方法中的while(true)循环可能是罪魁祸首。同时,服务端假死会影响客户端的Zookeeper注册,使客户端接收到无provider的异常通知。
摘要由CSDN通过智能技术生成

while(true)引发的Dubbo应用假死

现象:

当客户端向服务器发起调用的时候,Dubbo出现无法响应,客户端报超时异常,而且当客户端继续调用任何服务时,出现No provider available 异常。而此时服务器不见异常,偶尔报出OOM异常。

问题汇总
  • 客户端首次访问该接口超时
  • 客户端继续调用任何服务时,No provider异常或者超时
  • 服务端偶尔OOM异常
  • 服务端假死状态,难以attache到进程执行dump

客户端超时的问题,通过日志查看,是服务端到达超时时间无响应;客户端No provider问题,通过查看zookeepper是provider已经删除注册的节点信息。所以,都是服务端的错。

服务端问题排查

通过jvisualvm连接到服务端,客户端开始调用时,发现permgen平稳,和heap区在几秒内接近极限值,然后jvisualvm默默的挂了停止输出曲线图。服务端已经处于假死状态了。用jstack看了下线程,140个线程左右,大部分都是block状态。唯独服务的实现方法很忙 。
用bin下面的工具基本上没什么救。回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值