我們有一個生產Java系統,它比平時使用更多的線程。我想使用kill -3 pid
來獲取線程轉儲,並且如果需要,可以使用JConsole在Eclipse MAT中獲得二進制堆轉儲以進行離線分析。在生產系統上生成threaddump的安全性
我在RHEL4上運行Java 1.5.0_10。
這些中的任何一個會如何殺死JVM?在生產垃圾堆時,對它的性能有什麼不利影響?
我們有一個生產Java系統,它比平時使用更多的線程。我想使用kill -3 pid
來獲取線程轉儲,並且如果需要,可以使用JConsole在Eclipse MAT中獲得二進制堆轉儲以進行離線分析。在生產系統上生成threaddump的安全性
我在RHEL4上運行Java 1.5.0_10。
這些中的任何一個會如何殺死JVM?在生產垃圾堆時,對它的性能有什麼不利影響?
它不會殺死虛擬機,但生成堆轉儲可能會在轉儲過程中凍結JVM,因爲它必須轉儲一致的快照。轉儲完成後,它將恢復所有掛起的線程。所以它不會有破壞性,但會暫時停止處理。
我用下面的命令來獲得堆轉儲
JMAP -heap PID
詳情 - http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
對不起,但沒有回答這個問題 – keiki 2015-09-15 07:32:11
我假設線程轉儲是少了很多昂貴的生產比堆轉儲。它甚至需要暫停VM嗎? – Rich 2010-12-16 13:17:27
@ Rich:很便宜,是的。它仍然需要暫停虛擬機,但它只需要很短的時間就不會注意到它。 – skaffman 2010-12-16 13:18:48
非常感謝:=) – Rich 2010-12-16 13:19:45