背景
线上环境一个后台项目,提供基于dubbo实现的事件分发服务,最近突然出现心跳超时。
问题分析
检查内存是否溢出
jstat -gcutil 8166 1000
意料之中,内存正常,因为内部有接入内存溢出告警,如果是内存溢出应该有收到通知,但是这次没有溢出通知。
查看线程栈
jstack -l 8166
发现有大量DubboServerHandler开头的线程阻塞在一个同样的地方,脱敏简化后信息如下:
"DubboServerHandler-192.168.160.42:9184-thread-200" #372 daemon prio=5 os_prio=0 tid=0x0000000002342000 nid=0x252b waiting on condition [0x00007f2ce8deb000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000008a51c930> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.con