2010-10-18 16 views
7

我有一個作爲Windows服務運行的Tomcat,並且這些已知不能與jstack一起使用。另一方面,jconsole運行良好,我可以看到各個線程的堆棧(我連接到「localhost:port」來訪問它)。如何通過JMX創建線程轉儲?

如何使用jconsole或類似工具將所有線程堆棧轉儲到文件中? (類似於jstack)

回答

3

這裏的另一個代碼示例,會寫一個堆棧轉儲到一個文件:

http://pastebin.com/zwcKC0hz

我們用這個了JMX給我們堆棧的近似值甩了你當你得到JMX請求或進程檢測到高的意外負載。

4

現在,您可以使用jvisualvm工具通過JMX連接到遠程JVM並創建線程轉儲。不知道這是否是可用的

Java VisualVM

+1

這是令人難以置信的緩慢:( – 2015-11-27 06:29:54

1

,如果你把一個飛行記錄,以獲取有關JVM行爲更深的看法,特別是集中於熱點方法這將是有益的。

通常情況下,錄製半小時就足夠了。觸發錄像,你必須在機器上登錄,併發出以下命令:

如果使用Java HotSpot的1.8.x的:

$ JAVA_HOME /斌/ jcmd VM.unlock_commercial_features $ JAVA_HOME/bin中/ jcmd JFR.start持續時間= 1800 =設置文件名的個人資料=的/ tmp/recording.jfr

如果使用的Java HotSpot的1.7.x:

編輯你的$ HOME/conf目錄/ wrapper.conf文件中加入以下JVM啓動時的參數:

wrapper.java.additiona = - XX:+ UnlockCommercialFeatures wrapper.java.additional = - XX:+ FlightRecorder

(與相應的位置編號替換)

然後,已重新啓動你的實例。一旦完成,發出以下命令:

$ JAVA_HOME /斌/ jcmd JFR.start持續時間= 1800 =設置文件名的個人資料=的/ tmp/recording.jfr

飛行記錄西港島線產生一個文件/ tmp/recording.jfr終止後。