代码之家  ›  专栏  ›  技术社区  ›  Mala

分析Java:找出线程在哪里被阻塞

  •  5
  • Mala  · 技术社区  · 14 年前

    我有一个多线程的应用程序,它可以很好地扩展,但运行在一个16 cpu的服务器上,一旦超过5或6个硬件线程,性能就会下降。我 瓶颈围绕着一个同步方法。但是,在我开始深入代码并尝试用非阻塞的方法替换算法之前,我需要确定这是有罪的方法。

    -Xprof公司 参数告诉我,正如我所料,线程的大部分时间都被阻塞。有没有办法把它分解成他们被封锁的时间 以特定的方法 ?

    4 回复  |  直到 14 年前
        1
  •  1
  •   ddimitrov    14 年前

    http://yourkit.com monitor视图将告诉您哪个锁类是热的,谁持有争用的锁并按锁实例和调用方堆栈进行分解。该工具有30天的评估期。

        2
  •  1
  •   vanza    14 年前

    JDK附带的jvisualvm工具可以帮助您一点,尽管它的CPU配置信息非常有限(更多是Xprof数据的可视化工具)。我通常认为它对内存分析更有用。

    JProfiler有一个非常好的CPU分析器,它有一些非常酷的功能,可以帮助您,但它是商业的。

        3
  •  1
  •   Community Lee Campbell    7 年前

    你能试试吗 this method ? 如果它可以跨多个CPU工作,它应该会发现问题,但这是一个很大的“If”。

    基本上,当您看到一个线程被阻塞时,调用堆栈会告诉您确切的原因。如果你不确定你是否看到了真正的问题,那就做几次。

        4
  •  0
  •   MarcH rhardih    14 年前

    Eclipse TPTP是另一个非常好的免费分析器。