【问题标题】:What free tools are available to analyze lock contention in java?有哪些免费工具可用于分析 Java 中的锁争用?
【发布时间】:2009-06-25 13:01:58
【问题描述】:

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

【问题讨论】:

    标签: java multithreading locking


    【解决方案1】:

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

    【讨论】:

    • 我认为这个问题与应用程序运行期间有关锁争用的一些统计信息有关 - 这是系统中的热锁。
    【解决方案2】:

    您也可以在 eclipse 的调试器中查看。在 Debug 视图中,使用视图工具栏上的小三角形菜单打开“Java->Show Monitors”。

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

    【讨论】:

      【解决方案3】:

      VisualVM(Java 1.6 的一部分)(see)

      【讨论】:

      • VisualVM 不需要单独的插件吗?
      【解决方案4】:

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

      【讨论】:

      • 你不需要为了获得线程转储而终止进程——只需运行 jstack 其中 是进程 ID。
      • kill -3 命令不会终止进程。它只是发出信号,但进程将继续运行。
      【解决方案5】:

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

      【讨论】:

      • 你有这种实现的例子吗(即java代码)
      猜你喜欢
      • 2010-12-13
      • 2010-11-10
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2010-12-02
      相关资源
      最近更新 更多