認(rèn)識Java Core和Heap Dump

什么是Java Core和Heap Dump

Java程序運行時,有時會產(chǎn)生Java Core及Heap Dump文件,它一般發(fā)生于Java程序遇到致命問題的情況下。

發(fā)生致命問題后,Java進程有時可以繼續(xù)運行,但有時會掛掉。

為了能夠保留Java應(yīng)用發(fā)生致命錯誤前的運行狀態(tài),JVM在死掉前產(chǎn)生兩個文件,分別為JavaCore及HeapDump文件。

JavaCore和Heap Dump的區(qū)別

l JavaCore是關(guān)于CPU的

JavaCore文件主要保存的是Java應(yīng)用各線程在某一時刻的運行的位置,即JVM執(zhí)行到哪一個類、哪一個方法、哪一個行上。它是一個文本文件,打開后可以看到每一個線程的執(zhí)行棧,以stack trace的顯示。通過對JavaCore文件的分析可以得到應(yīng)用是否“卡”在某一點上,即在某一點運行的時間太長,例如數(shù)據(jù)庫查詢,長期得不到響應(yīng),最終導(dǎo)致系統(tǒng)崩潰等情況。

l HeapDump文件是關(guān)于內(nèi)存的。

HeapDump文件是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況,這種文件需要相應(yīng)的工具進行分析,如IBM Heap Analyzer這類工具。這類文件最重要的作用就是分析系統(tǒng)中是否存在內(nèi)存溢出的情況。

如何生成Java Core、Heap Dump文件

這兩個文件可以用手工的方式生成,當(dāng)我們會遇到系統(tǒng)變慢或無響應(yīng)的情況,這時就以采用手工的方式生成Java Core及Heap Dump文件。

在Unix/Linux上,產(chǎn)生這兩個文件的方法如下:

# ps -ef | grep java  
user 4616 4582 0 17:30 pts/0 00:00:00 grep java
root 5580 1 0 Oct27 ? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start  
# kill -3 5580

首先,找出Java進程id ,然后再執(zhí)行‘kill -3 進程號’的操作,等文件生成后再做一次同樣的操作,再產(chǎn)生一組文件。

如何分析

Java Core

IBM Thread and Monitor Dump Analyzer for Java

功能:IBM Thread and Monitor Dump Analyzer for Java是一個可以用來分析JavaCore日志中每個線程的信息并提供診斷信息的工具。

下載地址:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=2245aa39-fa5c-4475-b891-14c205f7333c

下載后可以獲得名字類似jca457.jar的文件。jca是Java Coredump Analyzer的縮寫,后面的數(shù)字是版本號。

使用方法:

jca***.jar是一個可執(zhí)行的jar包??梢暂斎胍韵旅顏磉\行。

-jar是執(zhí)行jar包的參數(shù);-Xmx用來為執(zhí)行jca457的進程分配最大堆內(nèi)存。

<Java Runtime Environment path>java -Xmx500m -jar jca457.jar

screenshot

Heap Dump

IBM HeapAnalyzer

功能:一個用來尋找Java堆缺陷的圖形化工具。

下載地址:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

下載后可以獲得名字類似ha456.jar的文件。ha是Heap Analyzer的縮寫,后面的數(shù)字是版本號。

使用方法:

jca***.jar是一個可執(zhí)行的jar包??梢暂斎胍韵旅顏磉\行。

-jar是執(zhí)行jar包的參數(shù);-Xmx用來為執(zhí)行jca457的進程分配最大堆內(nèi)存。

<Java Runtime Environment path>java –Xmx4g -jar ha456.jar

上面的代碼為運行ha456的進程分配了4G的內(nèi)存去運行。

注:由于發(fā)生HeapDump產(chǎn)生的文件往往比較大,進程在分析文件時需要占用大量內(nèi)存。如果分配內(nèi)存不夠,有可能還沒有分析完文件,程序就提示內(nèi)存不夠,從而中斷分析。所以,必須保證你的機器的內(nèi)存大小至少要大于Heap Dump文件。

screen
?著作權(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ù)。

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