Java进程被系统内核杀死
原创2025年3月14日大约 2 分钟
背景
同事的一个java服务每隔一段时间就会被杀死
分析原因
#查看系统内核日志(可过滤Kill process)
root@master:~# dmesg
[124183788.109769] [24794] 0 24794 1157 16 57344 0 0 sh
[124183788.109770] [24798] 0 24798 1304547 1189669 10100736 0 0 php
[124183788.109772] [24823] 116 24823 18451 121 135168 0 0 scache
[124183788.109773] [25538] 0 25538 2761 17 65536 0 0 sleep
[124183788.109774] Out of memory: Kill process 9313 (java) score 393 or sacrifice child
[124183788.111722] Killed process 9313 (java) total-vm:10593144kB, anon-rss:6655812kB, file-rss:0kB, shmem-rss:0kB
[124183788.530320] oom_reaper: reaped process 9313 (java), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
解读日志字段
字段 | 说明 |
---|---|
total-vm | 进程使用的虚拟内存总量(含共享库 |
anon-rss | 匿名内存(堆、栈等)占用的物理内存 |
file-rss | 文件缓存占用的物理内存 |
可以看到确实是java服务内存占用过高被内核kill掉了,最后一次杀死的java进程是9313,到java服务日志去确认进程,找到对应的启动日志如下,可以看到进程确实是9313,那么这就确定了原因,就是这个java服务占用内存过高被系统OOM Killer杀死,另外,如果是被系统OOM killer杀死,java是无法记录oom日志的即使设置了**-XX:+HeapDumpOnOutOfMemoryError
**
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.5)
2025-03-04 02:15:35.450 INFO 9313 --- [ main] com.sono.polaris.Application : Starting Application using Java 1.8.0_144 on master with PID 9313 (/home/tools/sono_ai_task-2.0.jar started by root in /home/tools)
2025-03-04 02:15:35.457 INFO 9313 --- [ main] com.sono.polaris.Application : The following 1 profile is active: "prod"
什么情况下java进程会被系统杀死
根据差的资料,如果没有是指最大对内存,jvm默认使用系统最大内存的1/4,我的系统是16G理论上应该最大只占用4G,但是dmesg显示的差不多10G了,另外还有个疑点是每次内核都是在同一个时间杀死的进程
oot@master:/home/tools# dmesg -T|grep ' Kill process'
[Wed Jan 8 01:59:30 2025] Out of memory: Kill process 16824 (java) score 422 or sacrifice child
[Fri Jan 24 01:59:13 2025] Out of memory: Kill process 12860 (java) score 450 or sacrifice child
[Thu Feb 13 01:58:59 2025] Out of memory: Kill process 18001 (java) score 450 or sacrifice child
[Tue Mar 4 01:58:18 2025] Out of memory: Kill process 19603 (java) score 566 or sacrifice child
[Fri Mar 14 01:58:32 2025] Out of memory: Kill process 9313 (java) score 393 or sacrifice child