天天看點

linux下生成dump檔案方法及設定

https://andyniu.iteye.com/blog/1965571

Linux中生成 Core Dump 檔案的方法

1 什麼是 Core Dump

Core Dump 又叫核心轉儲。在程式運作過程中發生異常時,将其記憶體資料儲存到檔案中,這個過程叫做 Core Dump。

2 Core Dump 的作用

在開發過程中,難免會遇到程式運作過程中異常退出的情況,這時候想要定位哪裡出了問題,僅僅依靠程式自身的資訊列印(日志記錄)往往是不夠的,這個時候就需要 Core Dump 檔案來幫忙了。

一個完整的 Core Dump 檔案實際上相當于恢複了異常現場,利用 Core Dump 檔案,可以檢視到程式異常時的所有資訊,變量值、棧資訊、記憶體資料,程式異常時的運作位置(甚至記錄代碼行号)等等,定位所需要的一切資訊都可以從 Core Dump檔案擷取到,能夠非常有效的提高定位效率。

3 如何生成 Core Dump

前UAP主要使用IBM jdk和SUN jdk,當中間件發生記憶體溢出時,IBM jdk會自動生成dump檔案,而SUN jdk不會生成,是以我們通常推薦使用IBMjdk。

但在有些時候,我們需要分析jvm記憶體使用情況,例如各分區占用率,哪些對象占用等,需要我們手動生成dump檔案,以下說明linux下IBMjdk和SUNjdk手工生成dump檔案方法。

第一步:檢視程序PID (指令為:ps –ef|grep java);

第二步:進入到jdk目錄下 (指令為:cd/data/jdk1.6.0_27)

進入到bin目錄下 (指令為:cd bin)

第三部:分析JVM記憶體

./jmap –heap pid 檢視整個JVM的記憶體使用情況,例如:

./jmap –histo pid 檢視JVM中對象記憶體占用情況

導出整個JVM中的記憶體資訊

jdk/bin目錄下生成檔案 (指令為:./jmap –dump:format=b,file=[檔案名])

例如:./jmap –dump:format=b,file=0807.txt 27054

生成檔案為二進制檔案,無法直接檢視,需要借助jvm分析工具。

自動生成:

1.2自動生成dump檔案:

-XX:+HeapDumpOnOutOfMemoryError

當OutOfMemoryError發生時自動生成 Heap Dump 檔案。

這是一個非常有用的參數,因為當你需要分析Java記憶體使用情況時,往往是在OOM(OutOfMemoryError)發生時。

-XX:+HeapDumpBeforeFullGC

當 JVM 執行 FullGC 前執行 dump。

-XX:+HeapDumpAfterFullGC

當 JVM 執行 FullGC 後執行 dump。

-XX:+HeapDumpOnCtrlBreak

互動式擷取dump。在控制台按下快捷鍵Ctrl + Break時,JVM就會轉存一下堆快照。

-XX:HeapDumpPath=d:\test.hprof

指定 dump 檔案存儲路徑。

注意:JVM 生成 Heap Dump 的時候,虛拟機是暫停一切服務的。如果是線上系統執行 Heap Dump 時需要注意。

2,檢視dump檔案

推薦使用jdk自帶的visualVM,其在JDK_HOME/bin目錄下,可搜:jvisualvm。注意:windows系統是jvisualvm.exe檔案。

然後裝入快照即可。