有哪些免费工具可用于分析Java中的锁争用?

4

我需要确定我的应用程序代码中哪些锁定是最具争议的。有哪些免费工具可以用来确定这一点?

5个回答

4

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


2
我认为这个问题涉及到应用程序运行期间锁争用的一些统计数据 - 即系统中的热门锁。 - akarnokd

3
你也可以在Eclipse的调试器中查看。在“调试”视图中,使用视图工具栏上的小向下三角形菜单打开“Java->显示监视器”。
当你怀疑死锁时,暂停应用程序(在调试视图中选择应用程序并按下调试视图工具栏上的暂停按钮),如果存在死锁,则阻塞线程将变为红色。如果你展开这些线程,就可以看到锁争用。

2

VisualVM是Java 1.6的一部分 (参见)


VisualVM需要单独的插件吗? - akarnokd

2

JDK具有一些内置支持方法。在Unix系统下,可以使用kill -3命令终止进程;在Windows系统下,可以按Ctrl-Break组合键。这将显示完整的线程转储信息,以及任何检测到的死锁情况。此外,在线程转储中,您可以查看哪些线程拥有什么锁,并将它们与其他线程进行比较。


1
你不需要杀死进程来获取线程转储 - 只需运行jstack <pid>,其中<pid>是进程ID。 - Richard Warburton
3
kill -3命令并不会杀死进程,它只是向该进程发送信号,但进程仍将继续运行。 - Don Branson

2
如果您拥有代码,您可以创建/寻找一个锁实现来收集争用统计信息。如果没有,请尝试其他帖子中建议的工具。

你有这种实现的例子吗?(例如Java代码) - Rhubarb

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