Java程序突然挂掉问题排查过程

Java程序突然挂掉问题排查过程

 

问题:

程序在linxu服务器运行的好好的,收到线上告警服务离线,登录linux服务器查看,发现服务进程已经终止。

排查过程:
1.思考可能引起服务挂掉的原因

  • java本身发生OOM,即日志中打印"java.lang.OutOfMemoryError: Java heap space"
  • 被linxu操作系统执行OOM-Killer

2.首先查看服务器监控数据,发现该服务jvm内存使用正常,查看服务日志也没有发现打印OutOfMemoryError异常信息,可以排除此原因。

怀疑:有可能Java进程本身没有内存过高被杀,但是这个进程当时占用的内存过高,挤占了OS内核空间, 直接被操作系统触发OOM-Killer给杀死了

查看java进程数据

[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

查看被系统杀死的进程

[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

发现我的Java应用确实被 kill 了, 内存占用接近3G

确定发生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

结论:确实是因为内存占用过高导致被Linux杀死

解决方案:
1.调整jvm配置,官方建议是机器物理内存的60%。  java -jar    -Xmx
2.增加物理机内存

posted @ 2023-08-30 11:07  kelelipeng  阅读(639)  评论(0编辑  收藏  举报