一、查询系统日志
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.8Gi(
free -h
结果),而:
- Java 进程内存需求高:即使单个 Java 进程实际占用~400MB 物理内存,但虚拟内存申请量高达~2.9GB,叠加系统其他进程(如内核、SSH、日志服务等),总内存会被快速耗尽;
- 无 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)则成功。