2011-05-08 59 views
6

我使用JProfiler和YourKit分析了我的代碼。但是,我一直無法弄清楚如何檢測哪一段代碼負責高CPU負載。Java分析:檢測哪一段代碼會導致CPU負載過高

如果響應時間不好,檢測熱點很重要。在我的情況下,雖然響應時間不是問題。只是在處理這個特定請求的短時間內,CPU負載非常高(令人驚訝的高)。

我該如何針對哪些類別/方法引起這種情況?我想我正在尋找的是某種列表,它告訴我需要多少個CPU週期處理一個方法 - 或者這樣。

+1

方法熱點將是我會看的地方。你有什麼理由不相信這個結果嗎?當一個請求正在執行時,你不希望CPU達到100%(或至少一個整個內核)嗎? – 2011-05-08 13:46:56

+0

是的,當然你是對的。測量CPU週期數和測量執行時間直接相關爲[執行時間=(每個週期的週期數×時間)+ I/O等待時間]。 – 2011-05-08 20:31:01

回答

5

CPU負載本質上指示CPU有什麼需要做的CPU週期數,而不是僅僅是虛擬拇指。因此,如果你的請求真正做到了真正的工作(而不是等待磁盤I/O),那麼可以預料,由於cpu需要做的事情,工作完成時負載會變高。

你需要尋找的東西是CPU週期不足,因爲這是響應時間開始攀升。

如果您的問題在於請求太短以至於探查器無法向您顯示需要查看的內容,請考慮使用自動化工具來請求它處理成千上萬個請求。這應該有所幫助。

+1

「而不是隻是在虛擬拇指」:) +1 – Eugene 2013-04-26 09:35:51

1

正在處理中,它是100%。在等待時(比如I/O),它在0%。中間沒有。 當進程少於100%時,這是過去N毫秒的滾動平均值。

如果有辦法讓它更有效率,那會花費更少的時間,而不是更少的百分比(必然)。

如果你想找到一種方法,使其花費更少的時間,給它足夠的工作量和try this