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