更新時(shí)間:2019-08-22 11:13:58 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3915次
JavaCore文件主要保存的是Java應(yīng)用各線程在某一時(shí)刻的運(yùn)行的位置,即JVM執(zhí)行到哪一個(gè)類、哪一個(gè)方法、哪一個(gè)行上。
它是一個(gè)文本文件,打開后可以看到每一個(gè)線程的執(zhí)行棧,以stacktrace的顯示。
通過(guò)對(duì)JavaCore文件的分析可以得到應(yīng)用是否“卡”在某一點(diǎn)上,即在某一點(diǎn)運(yùn)行的時(shí)間太長(zhǎng),例如數(shù)據(jù)庫(kù)查詢,長(zhǎng)期得不到響應(yīng),最終導(dǎo)致系統(tǒng)崩潰等情況。
HeapDump文件是一個(gè)二進(jìn)制文件,它保存了某一時(shí)刻JVM堆中對(duì)象使用情況。
這種文件需要相應(yīng)的工具進(jìn)行分析,如IBMHeapAnalyzer這類工具。這類文件最重要的作用就是分析系統(tǒng)中是否存在內(nèi)存溢出的情況。
在NC的項(xiàng)目上我們經(jīng)常要生成javacore和heapdump來(lái)進(jìn)行分析。這里總結(jié)一下我自己在NC項(xiàng)目上生成這兩個(gè)文件的方法。
JAVACORE篇:
WINDOWS平臺(tái):
ORACLEJDK:HOTSPOT
1.jvisualvm工具。
jvisualvm是sun的JDK中自帶的工具,在java_home/bin/jvisualvm.exe中就可以打開。
掛在到對(duì)應(yīng)的java進(jìn)程后,可以直接生javacore。

2.jstack工具。
jstack為JDK自帶的命令行工具??梢酝ㄟ^(guò)jstack-l-r-pid的方式生成對(duì)應(yīng)的javacore。
其中-l-r可以顯示出詳細(xì)信息,鎖信息等。
3.sendsignal工具。
sendsignal工具是老外開發(fā)的一個(gè)小工具,用來(lái)生成已知進(jìn)程號(hào)的java進(jìn)程的javacore。
附件中有具體工具。通過(guò)sendsignal.exepid即可生成。
4.ctrl+break按鍵
在Windows上啟動(dòng)程序的時(shí)候,可以直接在啟動(dòng)NC的窗口按組合鍵生成javacore。
然而由于NC涉及到兩個(gè)java進(jìn)程,一個(gè)小的導(dǎo)程序,一個(gè)是正式的程序。
所以用該方法只能生成引導(dǎo)程序的javacore??床坏缴a(chǎn)環(huán)境的實(shí)際快照。
IBMJDK:V9
1.系統(tǒng)宕機(jī)自動(dòng)生成。
IBM的JDK在系統(tǒng)宕機(jī)的時(shí)候會(huì)自動(dòng)生成javacore,這也是我們經(jīng)常用該JDK替換默認(rèn)的緣故。
2.sendsignal工具。
3.ctrl+break組合鍵。
4.NMC控制臺(tái)。
NC自帶的監(jiān)控工具NMC可以直接點(diǎn)擊對(duì)應(yīng)server,右鍵直接生成javacore。
該工具只針對(duì)于Websphere集群生效。對(duì)于單機(jī)websphere或者NC中間件不生效。

5.Websphere控制臺(tái)。
有的時(shí)候我們發(fā)現(xiàn),系統(tǒng)卡死,或者需要同時(shí)生成多個(gè)Server的javacore的時(shí)候,
我們就需要在websphere的控制臺(tái)中直接生成。生成方式為Troubleshooting->Javadumpsandcores。

5.JSP小補(bǔ)丁程序。
該程序是自己編寫的jsp小程序。
使用方式為,將javacore.jsp放置到nchome/hotwebs/nc_web下即可,重啟生效。
訪問(wèn)的時(shí)候,通過(guò)ip地址+端口+javacore.jsp即可在JAVA_HOME中生成。
如127.0.0.1:9081/javacore.jsp。補(bǔ)丁在附件中。
主要調(diào)用IBM的JDK內(nèi)部方法com.ibm.jvm.Dump.JavaDump();
LINUX平臺(tái):
1.kill-3-pid
在linux平臺(tái)上,除了之前的各種方法之外,可以直接調(diào)用系統(tǒng)的kill-3方法。
HEAPDUMP篇:
WINDOWS平臺(tái):
ORACLEJDK:HOTSPOT
1.jvisualvm工具。
和之前生成javacore的方法類似。

2.jmap方法。
jmap方法為JDK自帶的方法。通過(guò)命令行的方式生成。
jmap-dump:file=path_to_filepid如jmap-dump:file=d:\2234。
3.系統(tǒng)宕機(jī)自動(dòng)生成。
由于oracle的JDK在宕機(jī)的時(shí)候,不會(huì)自動(dòng)生成heapdump文件。
需要我們通過(guò)添加JVM參數(shù)的方式來(lái)顯示申明。
在JVM參數(shù)中加-XX:+HeapDumpOnOutOfMemoryError。
4.通過(guò)windows任務(wù)管理器。
windows的任務(wù)管理器可以直接將java的堆對(duì)象全部轉(zhuǎn)儲(chǔ)出來(lái)。
只需要點(diǎn)擊右鍵進(jìn)行保存即可。保存后的文件需要通過(guò)類似IBM的MAT分析工具打開。

IBMJDK:V9
1.系統(tǒng)宕機(jī)自動(dòng)生成。
2.利用coredump功能。
利用websphere自帶的coredump功能,可以將所有宕機(jī)時(shí)的堆棧信息全部輸出。
包含堆中對(duì)象的具體信息,如hashmap中的鍵值都可以看到具體的值。
是跟蹤宕機(jī)問(wèn)題的終極法寶。
具體方法為,在JVM中添加參數(shù):--Xdump:system:events=user,request=exclusive+prewalk+compact
3.JSP小補(bǔ)丁程序。
該程序是自己編寫的jsp小程序。
使用方式為,將heapdump.jsp放置到nchome/hotwebs/nc_web下即可,重啟生效。
訪問(wèn)的時(shí)候,通過(guò)ip地址+端口+heapdump.jsp即可在JAVA_HOME中生成。
如127.0.0.1:9081/heapdump.jsp。補(bǔ)丁在附件中。
主要調(diào)用IBM的JDK內(nèi)部方法com.ibm.jvm.Dump.HeapDump();
LINUX平臺(tái):
和上面的生成方法沒有太大區(qū)別。
以上為目前我總結(jié)的所有關(guān)于javacore和heapdump的收集方法。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)