最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JVM閃崩問題定位排查

 更新時間:2025年12月08日 11:34:52   作者:猩火燎猿  
JVM閃崩指Java進程異常退出,表現(xiàn)為進程消失、可能生成錯誤日志或coredump,下面就來介紹一下閃崩問題定位排查,感興趣的可以了解一下

一、什么是JVM閃崩?

JVM閃崩,指Java進程非正常退出,常見現(xiàn)象為進程消失、沒有明顯Java異常、可能生成hs_err_pid*.log或core dump,甚至被 操作系統(tǒng)直接kill。

二、排查思路總覽

  1. 收集信息:日志、dump文件、系統(tǒng)狀態(tài)。
  2. 分析JVM日志:重點查看hs_err_pid*.log。
  3. 分析系統(tǒng)日志:排查資源耗盡、進程被殺等情況。
  4. 分析core dump:定位native層崩潰。
  5. 回溯應用變更:查找近期變動。
  6. 復現(xiàn)與隔離:測試環(huán)境模擬,逐步縮小范圍。

三、詳細排查步驟

1. 收集關(guān)鍵信息

  • JVM錯誤日志hs_err_pid*.log(一般在工作目錄或/tmp下)
  • GC日志:如有開啟,便于分析內(nèi)存狀況
  • 應用日志:stdout、stderr、業(yè)務日志
  • 系統(tǒng)日志/var/log/messages、dmesg
  • core dump文件:如有配置,通常在工作目錄或指定路徑

2. 分析hs_err_pid*.log文件

重點關(guān)注以下字段:

字段說明
Error Signal如 SIGSEGV、SIGBUS、SIGFPE、SIGILL,指明崩潰類型
Problematic frame崩潰發(fā)生的native庫及函數(shù)
Java/Native Stack崩潰線程的堆棧,判斷與應用代碼還是native庫有關(guān)
Loaded Libraries已加載的native庫,排查第三方庫
JVM Version/ArgsJVM版本、啟動參數(shù),排查已知Bug
System Info操作系統(tǒng)、CPU架構(gòu)信息

舉例:

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f8c3b6e1c04, pid=12345, tid=12346
# Problematic frame:
# C  [libnative.so+0x1c04]  crash_func+0x14
  • SIGSEGV:段錯誤,通常是內(nèi)存非法訪問
  • libnative.so:第三方native庫導致崩潰

3. 分析系統(tǒng)日志

查看是否有OOM Killer記錄

grep -i 'kill' /var/log/messages
dmesg | grep -i 'oom'

檢查是否有硬件故障、磁盤異常等

查看進程資源限制

ulimit -a 

4. 分析core dump(如有)

使用gdb分析

gdb java core
(gdb) bt

定位native崩潰堆棧

如果涉及第三方native庫,聯(lián)系庫廠商或查閱源碼

5. 回溯應用變更

  • 是否近期升級JDK、native庫、調(diào)整JVM參數(shù)
  • 是否有新的代碼上線,特別是JNI、Unsafe等操作
  • 是否有新部署環(huán)境變更(如容器、虛擬化)

6. 復現(xiàn)與隔離

  • 在測試環(huán)境重現(xiàn)生產(chǎn)負載,觀察是否閃崩
  • 逐步剔除native庫、調(diào)整JVM參數(shù),找出觸發(fā)條件
  • 通過壓力測試、異常輸入等手段復現(xiàn)問題

四、常見JVM閃崩原因

原因排查方法
native庫(JNI)異常hs_err_pid*.log顯示崩潰在第三方庫,隔離/升級該庫
系統(tǒng)OOM系統(tǒng)日志有OOM記錄,JVM被kill,優(yōu)化內(nèi)存參數(shù)
JVM自身Bug查閱JVM版本、已知Bug,升級JDK
資源限制(ulimit)文件句柄、線程數(shù)超限,調(diào)整ulimit
硬件故障系統(tǒng)日志有硬件報錯,聯(lián)系運維排查硬件
容器/虛擬化環(huán)境限制容器資源配置不足,調(diào)整容器參數(shù)

五、典型案例分析

案例1:native庫內(nèi)存越界

  • 問題表現(xiàn):hs_err_pid*.log顯示SIGSEGV,問題幀為第三方庫
  • 處理:升級或隔離該庫,或聯(lián)系廠商修復

案例2:系統(tǒng)OOM

  • 問題表現(xiàn):進程無異常日志,系統(tǒng)日志顯示OOM killer kill進程
  • 處理:優(yōu)化JVM-Xmx參數(shù),提升機器內(nèi)存或限制其他進程

案例3:JVM版本Bug

  • 問題表現(xiàn):hs_err_pid*.log顯示崩潰在JVM自身代碼
  • 處理:查閱JDK發(fā)行說明,升級到穩(wěn)定版本

六、實用排查命令和工具

查找錯誤日志

find / -name "hs_err_pid*.log" 

查看崩潰信號和問題幀

grep -E 'SIG|Problematic frame' hs_err_pid*.log 

查看ulimit

ulimit -a 

分析core dump

gdb java core 

七、預防與建議

  1. 使用穩(wěn)定JDK版本,及時升級修復已知Bug
  2. native庫充分測試,避免自定義或不成熟庫
  3. 合理配置JVM參數(shù),避免資源超限
  4. 開啟監(jiān)控與報警,及時發(fā)現(xiàn)異常
  5. 配置core dump和heap dump,便于事后分析
  6. 灰度發(fā)布/回滾機制,新版本優(yōu)先小流量測試

八、快速定位流程圖

flowchart TD
    A[JVM閃崩] --> B{是否有hs_err_pid*.log}
    B -- 有 --> C[分析日志]
    B -- 無 --> D[查系統(tǒng)日志]
    C --> E{native庫/系統(tǒng)資源/JVM自身}
    D --> E
    E --> F[定位原因]
    F --> G[修復/優(yōu)化/升級]

九、如需幫助

如有具體hs_err_pid*.log內(nèi)容、core dump信息、系統(tǒng)日志片段,可貼出來,我可以幫你進一步分析定位!

十、深入分析技巧

1.hs_err_pid.log 關(guān)鍵字段詳解*

異常信號(例如 SIGSEGV)

  • SIGSEGV:段錯誤,通常是非法內(nèi)存訪問。
  • SIGBUS:總線錯誤,可能是硬件或內(nèi)存映射問題。
  • SIGFPE:浮點運算異常,如除零。
  • SIGILL:非法指令,通常是JVM或native庫損壞。

Problematic frame

直接定位到崩潰的native方法或庫。例如:

Problematic frame:
C  [libnative.so+0x1c04]  crash_func+0x14

如果是 JVM 自身的代碼(如 hotspot),建議查閱對應版本的已知Bug。

線程堆棧(Thread stack)

  • 可以分析崩潰發(fā)生前的線程狀態(tài),判斷是否與業(yè)務代碼有關(guān)。

Loaded Libraries

  • 列出所有已加載的native庫,排查是否有未授權(quán)或不穩(wěn)定的庫。

JVM參數(shù)

  • 例如-Xmx、-XX:MaxDirectMemorySize等,判斷是否資源配置合理。

2.core dump 深度分析

使用 gdb 查看 native 層堆棧

gdb java core 
(gdb) bt 

如果涉及第三方庫,建議聯(lián)系廠商或查閱源碼。

可配合 JVM 的 -XX:OnError 參數(shù),在崩潰時自動執(zhí)行腳本收集更多信息。

3.分析GC日志

  • 判斷是否頻繁Full GC,是否有內(nèi)存泄漏或資源耗盡導致JVM異常退出。
  • 關(guān)注OutOfMemoryErrorPromotion failed等異常。

4.操作系統(tǒng)資源分析

  • 查看進程資源限制(ulimit),如文件句柄、線程數(shù)。
  • 檢查系統(tǒng)負載、內(nèi)存、swap等,是否有其他進程影響。

十一、團隊協(xié)作流程建議

  1. 建立故障應急群組:運維、開發(fā)、測試、架構(gòu)師等多方協(xié)同。
  2. 故障分級響應:根據(jù)影響范圍,制定不同等級響應流程。
  3. 標準化信息收集腳本:如自動打包hs_err_pid*.log、core dump、系統(tǒng)日志等。
  4. 定期復盤:每次閃崩后,團隊復盤總結(jié),完善預案和文檔。

十二、典型問題場景與處理建議

場景1:頻繁閃崩但日志無明顯異常

  • 可能是JVM參數(shù)配置不合理(如直接內(nèi)存過大)。
  • 建議逐步縮減參數(shù),或開啟更多JVM診斷參數(shù)(如-XX:+PrintFlagsFinal)。

場景2:升級JDK后出現(xiàn)閃崩

  • 查看JDK發(fā)行說明,確認是否有兼容性問題。
  • 回退到原版本對比,或升級到更高版本。

場景3:業(yè)務代碼近期引入JNI/Unsafe

  • 回溯代碼變更,重點審查native相關(guān)調(diào)用。
  • 通過代碼審查、單元測試、壓力測試等方式排查。

場景4:容器環(huán)境JVM閃崩

  • 容器設置的資源限制(如memory、cpu)過低,導致JVM被kill。
  • 檢查容器配置,合理調(diào)高資源限制。

十三、常用JVM診斷參數(shù)

  • -XX:+HeapDumpOnOutOfMemoryError:OOM時自動生成heap dump。
  • -XX:+PrintGCDetails -Xloggc:<file>:輸出詳細GC日志。
  • -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=20M:GC日志滾動。
  • -XX:OnError="sh collect_info.sh":崩潰時自動執(zhí)行收集腳本。

十四、自動化故障信息收集腳本示例

#!/bin/bash
# collect_info.sh
date > info.txt
echo "==== hs_err_pid logs ====" >> info.txt
find / -name "hs_err_pid*.log" -exec cat {} \; >> info.txt
echo "==== dmesg ====" >> info.txt
dmesg | tail -n 100 >> info.txt
echo "==== ulimit ====" >> info.txt
ulimit -a >> info.txt
echo "==== top ====" >> info.txt
top -b -n 1 >> info.txt
tar czf jvm_crash_info_$(date +%s).tar.gz info.txt

將此腳本配置到JVM參數(shù)-XX:OnError="sh /path/collect_info.sh",崩潰時自動收集關(guān)鍵信息。

十五、總結(jié)與建議

JVM閃崩排查需要多維度分析,重在收集關(guān)鍵信息、分析日志、定位native層、結(jié)合系統(tǒng)資源與應用變更。建議建立標準化排查流程,提升故障響應效率。

  • JVM閃崩排查重在信息收集多層分析,建議建立標準化流程。
  • 重點關(guān)注hs_err_pid*.log、系統(tǒng)資源、native庫變更、JVM參數(shù)、容器/虛擬化環(huán)境。
  • 建議團隊協(xié)作、自動化收集、定期復盤,持續(xù)優(yōu)化故障處理能力。
  • 如遇疑難問題,及時尋求JDK廠商、社區(qū)或第三方庫支持。

到此這篇關(guān)于淺談JVM閃崩問題定位排查的文章就介紹到這了,更多相關(guān)JVM閃崩內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自動裝配原理解析

    SpringBoot自動裝配原理解析

    Spring Boot自動裝配是指在Spring Boot應用啟動時,根據(jù)類路徑下的jar包依賴、Bean定義、各種配置文件等信息,自動配置Spring應用上下文的Bean,本文給大家詳細解析了SpringBoot自動裝配原理,需要的朋友可以參考下
    2024-11-11
  • Java double類型比較大小詳解

    Java double類型比較大小詳解

    這篇文章主要介紹了Java double類型比較大小,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JVM虛擬機查找類文件的順序方法

    JVM虛擬機查找類文件的順序方法

    下面小編就為大家分享一篇JVM虛擬機查找類文件的順序方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Java多線程 ReentrantReadWriteLock原理及實例詳解

    Java多線程 ReentrantReadWriteLock原理及實例詳解

    這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • java中注解的實現(xiàn)原理詳解

    java中注解的實現(xiàn)原理詳解

    這篇文章主要介紹了java中注解的實現(xiàn)原理詳解,注解也叫元數(shù)據(jù),例如我們常見的@Override和@Deprecated,注解是JDK1.5版本開始引入的一個特性,用于對代碼進行說明,可以對包、類、接口、字段、方法參數(shù)、局部變量等進行注解,需要的朋友可以參考下
    2023-10-10
  • java正則表達式實現(xiàn)提取需要的字符并放入數(shù)組【ArrayList數(shù)組去重復功能】

    java正則表達式實現(xiàn)提取需要的字符并放入數(shù)組【ArrayList數(shù)組去重復功能】

    這篇文章主要介紹了java正則表達式實現(xiàn)提取需要的字符并放入數(shù)組,即基于正則的ArrayList數(shù)組去重復功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • Java設計模式之單一職責原則精解

    Java設計模式之單一職責原則精解

    設計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。本篇介紹設計模式七大原則之一的單一職責原則
    2022-02-02
  • SpringBoot如何讀取application.properties配置文件

    SpringBoot如何讀取application.properties配置文件

    這篇文章主要介紹了SpringBoot如何讀取application.properties配置文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 用IntelliJ IDEA看Java類圖的方法(圖文)

    用IntelliJ IDEA看Java類圖的方法(圖文)

    這篇文章主要介紹了用IntelliJ IDEA看Java類圖的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • SpringCloud使用Feign實現(xiàn)遠程調(diào)用流程詳細介紹

    SpringCloud使用Feign實現(xiàn)遠程調(diào)用流程詳細介紹

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡通信的細節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡通信細節(jié)。所有遠程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02

最新評論

墨竹工卡县| 德江县| 兴国县| 张北县| 阿勒泰市| 陵川县| 驻马店市| 介休市| 尤溪县| 万宁市| 辽阳市| 凤阳县| 正安县| 龙泉市| 黄梅县| 大荔县| 庆元县| 揭西县| 岢岚县| 从化市| 义马市| 商南县| 毕节市| 平乡县| 锡林浩特市| 织金县| 商河县| 蛟河市| 太白县| 达尔| 星子县| 长海县| 建始县| 洛扎县| 祁阳县| 来凤县| 玛沁县| 五家渠市| 宜州市| 花莲市| 阿城市|