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