linux线程引起jvm崩溃,JVM宕机分析
1、可以引發(fā)JVM崩潰的常見緣由有:linux
線程阻塞數(shù)據(jù)庫
CPU 使用率太高服務(wù)器
JVM Crash工具
堆內(nèi)存不足google
類裝載spa
Java虛擬機(jī)自身的Bug操作系統(tǒng)
JDK與服務(wù)器(CPU、內(nèi)存、操做系統(tǒng))的兼容性.net
內(nèi)存溢出插件
2、日志文件
hs_err_pid.log,致命錯(cuò)誤出現(xiàn)的時(shí)候,JVM生成了hs_err_pid.log這樣的文件,其中包含了虛擬機(jī)崩潰緣由的重要信息:
觸發(fā)致命錯(cuò)誤的操做異常或者信號;
版本和配置信息;
觸發(fā)致命異常的線程詳細(xì)信息和線程棧;
當(dāng)前運(yùn)行的線程列表和它們的狀態(tài);
堆的總括信息;
加載的本地庫;
命令行參數(shù);
環(huán)境變量;
操做系統(tǒng)CPU的詳細(xì)信息。
JavaCore及HeapDump文件,Java程序運(yùn)行時(shí),有時(shí)會(huì)產(chǎn)生JavaCore及HeapDump文件,它通常發(fā)生于Java程序遇到致命問題的狀況下。有時(shí)致命問題發(fā)生后,Jvm不會(huì)死掉,還能繼續(xù)運(yùn)行,但致命問題發(fā)生,Jvm進(jìn)程會(huì)死掉,為了可以保留Java應(yīng)用發(fā)生致命錯(cuò)誤前的運(yùn)行狀態(tài),JVM在宕掉前產(chǎn)生兩個(gè)文件,分別為JavaCore及HeapDump文件。
JavaCore文件主要保存的是Java應(yīng)用各線程在某一時(shí)刻的運(yùn)行的位置,即JVM執(zhí)行到哪個(gè)類、哪個(gè)方法、哪個(gè)行上。它是一個(gè)文本文件,打開后能夠看到每個(gè)線程的執(zhí)行棧,以stack trace的顯示。經(jīng)過對JavaCore文件的分析能夠獲得應(yīng)用是否“卡”在某一點(diǎn)上,即在某一點(diǎn)運(yùn)行的時(shí)間太長,例如數(shù)據(jù)庫查詢,長期得不到響應(yīng),最終致使系統(tǒng)崩潰等狀況。
HeapDump文件是一個(gè)二進(jìn)制文件,它保存了某一時(shí)刻JVM堆中對象使用狀況,這種文件須要相應(yīng)的工具進(jìn)行分析。這類文件最重要的做用就是分析系統(tǒng)中是否存在內(nèi)存溢出的狀況。
3、宕機(jī)分析
宕機(jī)的時(shí)候一定會(huì)產(chǎn)JavaCore及HeapDump文件,若是未宕機(jī)時(shí),想查看Jvm中線程與內(nèi)存狀況,那么在linux下可經(jīng)過kill -3 進(jìn)程號來手工產(chǎn)生這兩個(gè)文件來進(jìn)行分析。
MAT
Eclipse Memory Analyzer是一個(gè)很是好用的分析工具,咱們能夠利用它的Eclipse 插件輕松實(shí)現(xiàn)查看對象樹、對象大小、生成報(bào)告,甚至自動(dòng)化分析可能出現(xiàn)泄露的對象, 和其余插件的安裝很是相似,MAT 支持兩種安裝方式,一種是“單機(jī)版“的,也就是說用戶沒必要安裝 Eclipse IDE 環(huán)境,MAT 做為一個(gè)獨(dú)立的 Eclipse RCP 應(yīng)用運(yùn)行;另外一種是”集成版“的,也就是說 MAT 也能夠做為 Eclipse IDE 的一部分,和現(xiàn)有的開發(fā)平臺(tái)集成。
JavaCore文件的頭部有一個(gè)“Current Thread Details”標(biāo)記,它記錄了JavaCore產(chǎn)生時(shí)系統(tǒng)運(yùn)行的線程id,使用線程id在文件中查找線程的詳細(xì)信息,該信息中記載了線程運(yùn)行哪一個(gè)類的時(shí)候形成的JavaCore。
HeapDump文件是指定時(shí)刻的Java堆棧的快照,是一種鏡像文件。MAT工具經(jīng)過分析HeapDump文件,哪些對象占用了太多的堆棧空間,來發(fā)現(xiàn)致使內(nèi)存泄露或者可能引發(fā)內(nèi)存泄露的對象。
示例:
javacore文件分析:
由上圖可見,引發(fā)javacore的緣由是由于內(nèi)存溢出,但其進(jìn)程中的線程并未出現(xiàn)明細(xì)的異常,見
下圖的線程狀態(tài)分析。
引發(fā)javacore的線程以下所示:
該線程異常以下:
因而可知,由于內(nèi)存不足致使了內(nèi)存溢出,程序不存在異常,那么接下來經(jīng)過分析dump來查看內(nèi)存狀況,見下圖:
經(jīng)過上述的dump文件的分析,咱們獲得內(nèi)存的可能泄露點(diǎn)有兩個(gè),都是占用了比較大的內(nèi)存,經(jīng)過分析內(nèi)存泄露點(diǎn)來找到解決辦法。
總結(jié)
以上是生活随笔為你收集整理的linux线程引起jvm崩溃,JVM宕机分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SQL Server】用SQL命令建立
- 下一篇: linux查看命令类型,查看linux命