【发布时间】:2009-06-25 13:01:58
【问题描述】:
我需要确定在我的应用程序代码中哪些锁是最有争议的。我可以使用哪些免费工具来确定这一点?
【问题讨论】:
标签: java multithreading locking
我需要确定在我的应用程序代码中哪些锁是最有争议的。我可以使用哪些免费工具来确定这一点?
【问题讨论】:
标签: java multithreading locking
您可以在 JDK 的 bin 目录中使用 jconsole 或 jstack。特别是 jconsole 允许您连接到您的进程并监视线程,包括它们锁定了哪些资源,它可以帮助您识别死锁状态。
【讨论】:
您也可以在 eclipse 的调试器中查看。在 Debug 视图中,使用视图工具栏上的小三角形菜单打开“Java->Show Monitors”。
当您怀疑出现死锁时,暂停应用程序(在调试视图中选择应用程序并按下调试视图工具栏上的暂停按钮),如果出现死锁,阻塞线程将变为红色。如果您展开这些线程,您会看到锁争用。
【讨论】:
VisualVM(Java 1.6 的一部分)(see)
【讨论】:
JDK 有一些内置支持 - 在 unix 下,kill -3 进程,在 windows 下,ctrl-break。这将显示一个完整的线程转储,然后是检测到的任何死锁。另外,在线程 dusmp 中,您可以查看哪些线程拥有哪些锁,并将它们相互比较。
【讨论】:
如果您拥有该代码,则可以创建/查找收集争用统计信息的 Lock 实现。如果没有,请尝试其他帖子中建议的工具。
【讨论】: