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下面的工具基本上没什么救。回