2012-11-10 167 views
1

我的程序一直運行在最大1%的CPU使用率,但有時因爲程序內部的一些事件,我無法確定,它有100%的使用率,每15秒約5-10秒。它看起來像一個線程導致使用峯值,但我無法確定的來源(有8000類,所以這很難)。很難測試問題是否仍然存在(例如,在使某部分代碼「死亡」之後),因爲該問題有時會在虛擬機生命週期的幾個小時後開始存在。CPU使用率峯值

你有什麼想法可以幫助我找到問題的根源嗎?

+1

聽起來像您需要 – mre

回答

5

沒有更多信息,甚至不可能猜測問題的原因。

我會建議使用探查器(例如VisualVM)來確定哪個線程會導致問題,並且可能會發生什麼情況。

使用分析器會告訴你,例如:

  • 哪些線程是活動的,佔用CPU資源
  • 無論他們是VM或應用程序線程
  • 多少時間花費在垃圾收集操作 - GC通常是CPU使用率峯值的來源,因此也是延遲,儘管我相信最近的JVM在這方面有所改進。
  • 是否有鎖定問題
  • ...
+0

我使用VisualVM的一個Java剖析,我的大部分帖子都得到了同樣的遺囑執行人,所以我不能發現,是在運行線程秒殺的時間。 – user1656546

+0

是否由您自己的線程引起的峯值?或者由一個虛擬機? – thkala

+0

虛擬機,但我剛安裝JProfiler,它似乎比VisualVM更好,我認爲它會幫助我很多。 – user1656546