Java如何進行heap dump堆棧信息

作為Java程序員能夠?qū)崟r獲取到線上服務(wù)堆棧信息是一個非常重要的技能,也可以極大幫助我們定位線上問題以及發(fā)現(xiàn)服務(wù)中的隱藏故障。

dump服務(wù)的堆棧信息主要有兩種渠道,分別是自動生成dump文件和手動生成dump文件。

一、自動生成dump文件

顧名思義,當程序中出現(xiàn)內(nèi)存溢出或者gc的時候系統(tǒng)會自動dump出堆棧信息到指定路徑文件中。

為了實現(xiàn)上述功能需要在jvm啟動參數(shù)中添加如下的配置

1. -XX:+HeapDumpOnOutOfMemoryError

當OutOfMemoryError發(fā)生時自動生成 Heap Dump 文件。

當你需要分析Java內(nèi)存使用情況時,往往是在OOM(OutOfMemoryError)發(fā)生時。

2. -XX:+HeapDumpBeforeFullGC

當 JVM 執(zhí)行 FullGC 前執(zhí)行 dump。

3. -XX:+HeapDumpAfterFullGC

當 JVM 執(zhí)行 FullGC 后執(zhí)行 dump。

4. -XX:+HeapDumpOnCtrlBreak

交互式獲取dump。在控制臺按下快捷鍵Ctrl + Break時,JVM就會轉(zhuǎn)存一下堆快照。

5. -XX:HeapDumpPath=/opt/logs/dumplogs

指定 dump 文件的存儲路徑

二、手動生成dump文件

主要的步驟如下:

1.登錄上有問題的機器并獲取到相應(yīng)的root權(quán)限。

2.通過top指令知道需要dump的java進程

3.開始dump文件。命令:jmap -dump:file=文件名.hprof,format=b pid(進程號) 例如:jmap -dump:format=b,file=202104012.hprof 6666

使用自動和手動dump文件的方式會把dump的文件存儲到對應(yīng)的服務(wù)中需要將文件下載到本地進行分析

三、copy dump文件到本地

1.登錄自己的dump文件的服務(wù)器,執(zhí)行 sftp xxx@jumper.xxx.cn,成功后執(zhí)行命令 put 202104012.hprof(dump文件名) 傳輸文件。

2.文件傳輸完成后在本地shell 輸入命令 sftp xxx@jumper.xxx.cn,命令成功后執(zhí)行g(shù)et 202104012.hprof(dump文件名) 拉取文件到本地。

? 拉取文件時需要主要執(zhí)行命令的路徑是存儲文件的位置。

dump文件到本地以后就可以使用mat、Jprofile、visualVM等工具進行分析dump文件了。

最后:打一個小廣告,后續(xù)的文章會在微信公眾號“程序員之家QAQ”推送,歡迎大家搜索關(guān)注~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容