Java程序突然掛掉問題排查過程

問題:

程序在linxu服務(wù)器運行的好好的,收到線上告警服務(wù)離線,登錄linux服務(wù)器查看,發(fā)現(xiàn)服務(wù)進程已經(jīng)終止。

排查過程:
1.思考可能引起服務(wù)掛掉的原因

  • java本身發(fā)生OOM,即日志中打印"java.lang.OutOfMemoryError: Java heap space"
  • 被linxu操作系統(tǒng)執(zhí)行OOM-Killer

2.首先查看服務(wù)器監(jiān)控數(shù)據(jù),發(fā)現(xiàn)該服務(wù)jvm內(nèi)存使用正常,查看服務(wù)日志也沒有發(fā)現(xiàn)打印OutOfMemoryError異常信息,可以排除此原因。

懷疑:有可能Java進程本身沒有內(nèi)存過高被殺,但是這個進程當時占用的內(nèi)存過高,擠占了OS內(nèi)核空間, 直接被操作系統(tǒng)觸發(fā)OOM-Killer給殺死了

查看java進程數(shù)據(jù)

[ticket@iZ2ze0uo1c6bfj8d9lck63Z log]$ dmesg | grep java
[50380153.821507] java invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[50380153.821512] java cpuset=/ mems_allowed=0
[50380153.821516] CPU: 0 PID: 19176 Comm: java Tainted: G           OE  ------------ T 3.10.0-1062.1.2.el7.x86_64 #1
[50380153.821784] [ 5424]  1000  5424   876540    24047     156        0             0 java
[50380153.821792] [18875]  1000 18875  1280393   698641    1482        0             0 java
[50380153.821818] Out of memory: Kill process 18875 (java) score 750 or sacrifice child
[50380153.822757] Killed process 18875 (java), UID 1000, total-vm:5121572kB, anon-rss:2794564kB, file-rss:0kB, shmem-rss:0kB

查看被系統(tǒng)殺死的進程

[ticket@iZ2ze0uo1c6bfj8d9lck63Z log]$ dmesg | egrep -i 'killed process'
[50380153.822757] Killed process 18875 (java), UID 1000, total-vm:5121572kB, anon-rss:2794564kB, file-rss:0kB, shmem-rss:0kB

發(fā)現(xiàn)我的Java應(yīng)用確實被 kill 了, 內(nèi)存占用接近3G

確定發(fā)生oom

[ticket@iZ2ze0uo1c6bfj8d9lck63Z log]$ dmesg -T | grep 'Out of memory'
[Wed Jul 20 16:58:23 2022] Out of memory: Kill process 18875 (java) score 750 or sacrifice child

結(jié)論:確實是因為內(nèi)存占用過高導(dǎo)致被Linux殺死

解決方案:
1.調(diào)整jvm配置,官方建議是機器物理內(nèi)存的60%。
2.增加物理機內(nèi)存

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容