1. 程式人生 > >Java常用命令及Java Dump

Java常用命令及Java Dump

執行緒Dump,包含所有執行緒的執行狀態。純文字格式。
堆Dump,包含執行緒Dump,幵包含所有堆物件的狀態。二進位制格式。

Java Dump方法
1.使用Java虛擬機制作Dump
指示虛擬機器在發生記憶體不足錯誤時,自動生成堆Dump
-XX:+HeapDumpOnOutOfMemoryError

2.使用圖形化工具製作Dump
使用JDK(1.6)自帶的工具:Java VisualVM。


3.使用命令列製作Dump
jstack:列印執行緒的棧資訊,製作執行緒Dump。
jmap:列印記憶體對映,製作堆Dump。

步驟:
檢查虛擬機器版本(java -version)
找出目標Java應用的程序ID(jps)
使用jstack命令製作執行緒Dump  Linux環境下使用kill命令製作執行緒Dump
使用jmap命令製作堆Dump

都位於jdk的bin目錄下

1.jps顯示當前系統的java程序情況,及其id號

 jps相當於Solaris程序工具ps。不象”pgrep java”或”ps -ef grep java”,jps並不使用應用程式名來查詢JVM例項。因此,它查詢所有的Java應用程式,包括即使沒有使用java執行體的那種(例如,定製的啟動 器)。另外,jps僅查詢當前使用者的Java程序,而不是當前系統中的所有程序。

2.jstack用於生成java虛擬機器當前時刻的執行緒快照。

執行緒快照是當前java虛擬機器內每一條執行緒正在執行的方法堆疊的集合,生成執行緒快照的主要目的是定位執行緒出現長時間停頓的原因,如執行緒間死鎖、死迴圈、請求外部資源導致的長時間等待等。 執行緒出現停頓的時候通過jstack來檢視各個執行緒的呼叫堆疊,就可以知道沒有響應的執行緒到底在後臺做什麼事情,或者等待什麼資源。 如果java程式崩潰生成core檔案,jstack工具可以用來獲得core檔案的java stack和native stack的資訊,從而可以輕鬆地知道java程式是如何崩潰和在程式何處發生問題。另外,jstack工具還可以附屬到正在執行的java程式中,看到當時執行的java程式的java stack和native stack的資訊, 如果現在執行的java程式呈現hung的狀態,jstack是非常有用的。

3.jmap是JDK自帶的工具軟體,主要用於列印指定Java程序(或核心檔案、遠端除錯伺服器)的共享物件記憶體對映或堆記憶體細節。可以使用jmap生成Heap Dump。

常見記憶體錯誤:
outOfMemoryError 年老代記憶體不足。
outOfMemoryError:PermGen Space 永久代記憶體不足。
outOfMemoryError:GC overhead limit exceed 垃圾回收時間佔用系統執行時間的98%或以上。

4.jstat(JVM Statistics Monitoring Tool)是用於監控虛擬機器各種執行狀態資訊的命令列工具。他可以顯示本地或遠端虛擬機器程序中的類裝載、記憶體、垃圾收集、JIT編譯等執行資料,在沒有GUI圖形的伺服器上,它是執行期定位虛擬機器效能問題的首選工具。

5.jhat(Java Heap Analysis Tool),是一個用來分析java的堆情況的命令。之前的文章講到過,使用jmap可以生成Java堆的Dump檔案。生成dump檔案之後就可以用jhat命令,將dump檔案轉成html的形式,然後通過http訪問可以檢視堆情況。jhat命令解析會Java堆dump並啟動一個web伺服器,然後就可以在瀏覽器中檢視堆的dump檔案了。

jhat還提供了一種物件查詢語言(Object Query Language),OQL有點類似SQL,可以用來查詢。

6.javap是jdk自帶的一個工具,可以對程式碼反編譯,可以檢視java編譯器生成的位元組碼。