2011-09-21 59 views
3

我有一個應用程序服務器進程,不斷在100%的CPU。我一直都是指數小時甚至數天。如何查看我的Java進程正在執行的操作?

我知道如何生成堆/線程轉儲,但我在尋找更多的動態信息。我想知道這裏有多少CPU。有幾十(或可能是100+)線程。我知道那些線程是什麼,但我需要知道他們中的哪些人正在使用我的CPU。

我該如何獲取這些信息?

+0

如果您使用的是Tomcat,我發現[PSI Probe](http://code.google.com/p/psi-probe/)值得在每個Tomcat實例上部署。另外,您可以考慮在服務器上啓用JDWP並附加一個調試器。 –

回答

4

使用分析器。有一個包含在Oracle JDK附帶的VisualVM中。

一個先進的商業(試用許可證)是YourKit

2

我個人使用YourKit爲此。

VisualVM也有一些分析功能,但我沒有使用它們。

4

通過創建線程轉儲。您可以使用jstack連接到正在運行的java進程以獲取線程轉儲。如果您在一段時間內進行了兩次或多次線程轉儲,則可以通過分析它們確定哪些正在使用CPU。通常處於RUNNING狀態的線程是您需要關注的線程。

+0

@Konrad Garus:gkamal是完全正確的。拿幾個'jstack'樣本,它會告訴你它在做什麼。這很簡單。 –

0

在linux中試試kill -3 processid它會生成線程轉儲。你可以分析這個來看看java進程中發生了什麼。

相關問題