2010-11-12 110 views
5

我有一個多線程應用程序,它可以很好地擴展到16位cpu服務器上,一旦超過5或6個硬件線程,性能就會停止。 I suspect瓶頸包圍其中一種同步方法。但是,在開始深入代碼並試圖用非阻塞代碼替換算法之前,我需要確定這是有罪的方法。分析Java:找出線程花費時間阻塞的位置

使用-Xprof參數運行Java告訴我,正如我所料,線程正在花費大部分時間。有沒有辦法,我可以打破他們花了多少時間阻止在特定的方法

回答

1

http://yourkit.com監視器視圖會告訴你哪些鎖定類是熱門的,誰持有競爭的鎖和通過鎖實例和調用者堆棧進行細分。該工具有30天的評估期。

1

JDK附帶的jvisualvm工具可以幫助您一點點,儘管它的CPU分析信息相當有限(更多用於Xprof數據的可視化工具)。我通常發現它對內存分析更有用。

JProfiler有一個非常漂亮的CPU分析器與一些非常酷的功能,可能會幫助你,但它是商業。或者,您可以向您的代碼添加統計信息收集(例如,測量執行您懷疑的每個同步方法所需的時間,並將其分解爲等待同步/執行該方法的時間),但這還有很多其他的方法工作。

1

你可以試試this method?如果它在多個CPU上工作,它應該找到問題,但這是一個很大的「如果」。

基本上,當你看到一個線程被阻塞時,調用棧告訴你到底爲什麼。如果您不確定是否看到真正的問題,請多做幾次。

0

Eclipse TPTP是另一個非常好的免費分析器。