一、查询系统日志

grep -i "java" /var/log/messages

执行这条命令,检查系统日志里是否有 Java 进程被 OOM Killer 杀死的记录。

日志中反复出现以下内容:

Out of memory: Killed process 3679325 (java) total-vm:2947000kB, anon-rss:406604kB... 

Out of memory: Killed process:明确表示 Java 进程因内存不足被系统强制终止;
total-vm:进程申请的虚拟内存总量(约 2.9GB);
anon-rss:进程实际使用的物理内存(约 400MB 左右);
UID:0:以 root 用户运行,权限足够但内存仍不足。 

问题根源:

你的服务器总内存只有 1.8Gifree -h 结果),而:

 
  1. Java 进程内存需求高:即使单个 Java 进程实际占用~400MB 物理内存,但虚拟内存申请量高达~2.9GB,叠加系统其他进程(如内核、SSH、日志服务等),总内存会被快速耗尽;
  2. 无 Swap 分区free -h 显示 Swap: 0B,内存不足时无法通过交换空间缓解,系统只能直接杀死进程。

解决方案:

1. 紧急缓解:添加 Swap 分区

临时创建 Swap 文件,让系统内存不足时有缓冲空间(避免频繁 OOM 杀进程): 

# 1. 创建 1GB Swap 文件(根据实际情况调整大小,如 2G 则改为 count=2048)
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

# 2. 设置文件权限(安全必须)
sudo chmod 600 /swapfile

# 3. 格式化 Swap 文件
sudo mkswap /swapfile

# 4. 启用 Swap
sudo swapon /swapfile

# 5. 设置开机自动挂载(避免重启后失效)
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab

验证:执行 free -h,看到 Swap 行有值(如 1.0Gi)则成功。

 

二、内存使用情况分析(free -h 结果) 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐