2009-06-25 49 views

回答

4

你可以使用JConsole的或jstack无论是在你的JDK的bin目录。 jconsole特别允许你连接你的进程并监控线程,包括他们锁定的资源,它可以帮助你识别死锁状态。

+2

我认为这个问题涉及应用程序运行期间有关锁争用的一些统计信息 - 这是系统中的热门锁。 – akarnokd 2009-06-25 13:43:36

2

VisualVM的(Java 1.6的部分)(see

+0

VisualVM是否需要一个单独的插件? – akarnokd 2009-06-25 13:19:03

2

JDK有一些内置的支持 - 在unix下,杀死-3进程,在windows下,ctrl-break。这将显示一个完整的线程转储,然后检测到任何死锁。另外,在线程dusmp中,您可以看到哪些线程拥有哪些锁,并将它们相互比较。

+1

您不需要为了获得线程转储而终止进程 - 只需运行jstack ,其中是进程标识。 – 2013-01-06 13:28:25

+3

kill -3命令不会终止进程。它只是表明它,但过程将继续运行。 – 2013-01-06 13:47:56

3

你也可以在eclipse的调试器中查看它。在“调试”视图中,使用视图工具栏上的小下三角菜单打开“Java->显示监视器”。

当您怀疑发生死锁时,暂停应用程序(在调试视图中选择应用程序,然后按下调试视图工具栏上的暂停按钮),如果发生死锁,则阻塞线程将变为红色。如果展开这些线程,您可以看到锁争用。

2

如果您拥有该代码,则可以创建/查找收集争用统计信息的Lock实现。如果不是,请尝试其他帖子中建议的工具。

相关问题