如何调试JVM偶尔退出时挂起的问题

4
我有一个服务器,偶尔在退出时会挂起。这种情况只发生约1/10或更少的时间,到目前为止,我们无法找出一种可靠的方法来重现此问题。我已经检查了我的代码,并认为我正在关闭所有资源和杀死我的线程,但显然有些时候我没有正确关闭。
有人能提供调试提示来帮助我测试这个问题吗?当我无法可靠地重现它时,我尝试在它崩溃后运行JVisualVM,但除了显示sigterm线程仍在运行并且所有内容都为0%CPU外,它并没有太大帮助,我认为这意味着某处出现了死锁。
2个回答

2

你可以尝试使用JConsole来监控你的服务器。它可以直观地监测内存、CPU利用率、线程数等,同时还可以检测死锁。


如果不起作用,启用JPDA并在挂起时使用IDE调试器连接并查找挂起的非守护线程。 - Jim Garrison

2
当进程挂起时,您可以向该进程发送SIGQUIT(kill -3),它将生成线程转储。输出将发送到stderr,请确保捕获该输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接