我们的在线Kafka Broker服务突然挂掉了,这种情况发生的概率很低,而且没有任何时间规律性。没有崩溃,没有警告,没有错误,没有日志
命令“
jstack [pid]
”没有响应,然后我用命令“jstack -m [pid]
”打印堆栈跟踪,我发现所有线程状态都是BLOCKED,包括VM Thread。
VM 线程堆栈:
ox0000ffff99f4da8c __pthread_cond_wait
ox0000ffff997c014c _ZN2os13PlatformEvent4parkEv
ox0000ffff9976f014 _ZN7Monitor5IWaitEP6Thread1
ox0000ffff9976faf0 _ZN7Monitor4waitEblb
ox0000ffff999355dc _ZN20SuspendibleThreadSet11synchronizeEv
ox0000ffff99858a68 _ZN20SafepointSynchronize5beginEv
ox0000ffff999d3124 _ZN8VMThread4loopEv
ox0000ffff999d3458 _ZN8VMThread3runEv
ox0000ffff997b8204 _ZL10java_startP6Thread
ox0000ffff99f47800 start_thread
只有一个 thead 状态是 IN_NATIVE,它是堆栈跟踪:
ox0000ffff99de7dd8 __GI___poll
ox0000fffed7871a3c NET_Timeout0
ox0000fffe786ec40 Java_java_net_PlainSocketImpl_socketAccept
ox0000ffff8c015628 * java.net.PlainSocketImpl.socketAccept(java.net.SocketImpl) bci:0 (Interpreted frame)
ox0000ffff8c008498 * java.net.AbstractPlainSocketImpl.accept(java.net.SocketImpl) bci:7 line:409 (Interpreted frame)
ox0000ffff8c008498 * java.net.ServerSocket.implAccept(java.net.SocketImpl)
ox0000ffff8c008498 * java.net.ServerSocket.accept()
ox0000ffff8c008380 * sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept()
ox0000ffff8c008380 * sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop()
我不确定这是否是 JVM 的错误。也许IN_NATIVE线程没用,STS调用synchronize()卡住了。
aarch64上的Linux,jdk版本是 openjdk 版本“1.8.0_312” OpenJDK 运行时环境(内部版本 1.8.0_312-b07) OpenJDK 64 位服务器 VM(内部版本 25.312-b07,混合模式)
我尝试找出原因,但 JVM 挂起
这似乎是一个 JVM bug,如果是死锁,应该响应命令“jstack [pid]”。