2012-03-23 80 views

回答

15

有兩種不同的情況。

應用程序崩潰: 這是一個OOM嗎? NPE?什麼是例外?如果出現jvm崩潰,您將看到hs_err_.log(http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

查看您可能看到的文件,如果您自己的JNI導致崩潰或JVM錯誤。

應用程序掛起:我將從visualvm或jstat開始(兩者都是JDK的一部分)。你可以看到線程的當前狀態,並檢查是否有任何應用程序錯誤..

其他Linux工具,可以幫助看到裏面的過程:

  • lsof:您可以檢查過程中開得許多文件
  • strace:從系統調用的角度看當前活動。

Oracle tools documentation提供了漂亮的整潔的上市。它也鏈接Operating System Specific tools

+0

@ Bubby4j:你能找出墜機原因嗎?與os有什麼關係?我打算評估centos部署我們的工具,一個基於java的工具。 – Jayan 2012-03-24 16:07:43

+0

這是openvz的問題。 – 2013-05-06 13:14:52

13

對於初學者我建議JVisualVM。它隨JDK一起提供,因此您只需在命令行中鍵入jvisualvm即可啓動它。

一旦啓動,您可以連接到正在運行的JVM,因此您應該能夠連接到掛起的Java進程,並檢查堆棧轉儲的所有正在運行的線程以及堆的內容。


其它有用的內置工具包括:

jps運行Java的列表進程ID的過程

jstack打印一個堆棧轉儲爲每個線程在指定的JVM進程

jmap生成指定的JVM進程的堆轉儲(jvisualvm也可以生成堆轉儲)

jhat分析使用jmap或jvisualvm生成的堆轉儲文件


當然,還有更復雜的配置文件可用。 JProfiler頗受好評。

2

在這些情況下(掛起,凍結,...)你必須分析一個堆轉儲來試圖找出你的應用程序中發生了什麼,你可以使用JVisualVM來轉儲,或者你可以添加適當的JVM參數以在發生崩潰時轉儲堆的內容。

相關問題