有时候会遇到JAVA程序在服务器上运行一段时间后进程突然没有了,查看JAVA应用的日志并没有任何的异常。

这时候应该优先想到进程是不是被操作系统Kill掉了,查看操作系统日志:

cd /var/log/
# 查看 messages 文件
cat messages* | grep java

如果看到类似如下信息说明由于操作系统内存剩余太低,JAVA进程被操作系统干掉了:

Apr 15 20:57:50 iZuwucrzorhw2yZ kernel: java invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: java cpuset=/ mems_allowed=0
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: CPU: 0 PID: 2793 Comm: java Not tainted 3.10.0-693.2.2.el7.x86_64 #1
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 1356]     0  1356   629574    17847      94        0             0 java
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 3804]     0  3804   886644    19509     113        0             0 java
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 2676]     0  2676   894623    85673     278        0             0 java
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [ 2754]     0  2754   965673    40515     362        0             0 java
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: [14208]     0 14208  3051253   108737    4500        0             0 java
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: Out of memory: Kill process 14208 (java) score 113 or sacrifice child
Apr 15 20:57:51 iZuwucrzorhw2yZ kernel: Killed process 14208 (java) total-vm:12205012kB, anon-rss:434948kB, file-rss:0kB, shmem-rss:0kB

这种问题通常发生下内存较低的服务器下,操作系统为了保护内存能够支持自己运行,将JAVA进程杀掉。

找到了运营自然好解决,通过分为2种情况:

  1. JAVA程序有内存泄露问题, 这种情况那就通过JAVA内存分析工具 定位内存泄露的位置,然后修复。
  2. 服务器内存太低, 这种情况还是升级服务器吧。
打赏
一种 Linux JAVA进程突然消失的原因
Tagged on:     

发表评论