2011-04-27 210 views
3

我的應用程序消耗100%的CPU - 超過200%。當我通過調用Thread.getAllStackTraces()kill -3創建線程轉儲時,我發現有線程會佔用大量CPU時間,但是它們的堆棧跟蹤不可用。 CPU分析時不顯示它們。Java - 沒有堆棧跟蹤可用

線程爲:HandshakeCompletedNotify-Thread,Keep-Alive-Timerprocess reaper。但是它們的堆棧跟蹤不可用。據我所知,

Keep-Alive-TimerHandshakeCompletedNotify-Thread不應該是原生的。另外,我們在jre中的java.policy或java.security文件中沒有特殊的權限。

如何獲得這些線程的堆棧跟蹤以解決高CPU消耗?

+0

你已經[試過這個,對不對?](http://stackoverflow.com/questions/266373/one-could-use-a-profiler-but-why-not-just-halt-the-program/ 317160)#317160) – 2011-04-27 17:49:58

+1

據我所知,Ctrl + Break對Windows有好處,對於linux來說,同樣的選擇是kill -3,這就是我試過的 – 2011-04-27 17:53:51

+1

這三個CPU消耗很多很奇怪。我懷疑有些網絡問題,比如打開/關閉SSL連接的DDoS或類似的東西。 – 2011-04-27 18:06:15

回答

0

使用分析工具像visual vm

它具有CPU的採樣和分析支持,以顯示其中CPU消耗。

+0

試過了。由於沒有可用的堆棧跟蹤,因此Profiler不會看到這些線程 – 2011-04-27 17:54:49