运维
创建时间:
服务器OOM(Out Of Memory)
服务器OOM(Out Of Memory) - 详细内容介绍
如果你出现(SSH 连不上 + 网站也挂了 + 过几分钟恢复),在小内存服务器上跑 next build 时非常常见,基本就是 服务器被 OOM(Out Of Memory)卡死/杀进程 了。
下面教你几种方法确认是不是“崩溃”以及从哪里看日志:
1. 看系统是否因为内存不足杀了进程(最重要)
# 查看内核日志里是否有 OOM Kill
dmesg -T | grep -i -E "killed process|out of memory|oom"如果你看到类似:
[Mon Sep 9 12:34:56 2025] Out of memory: Killed process 12345 (node) total-vm:...就说明是 node(Next.js 构建进程)被 OOM 杀掉,期间系统可能卡死,导致你无法 SSH 和访问网站。
这就是 OOM Killer(内存不足杀进程) 的记录。
也就是说你的服务器没有真正“重启”,而是 内存用光 → 系统进入 OOM → 把正在吃内存的进程杀掉(node、甚至 networkmanager 都被杀)。
在这个过程中,服务器会卡死几分钟,SSH 和网站都连不上,所以你看到“崩溃”的现象。
2. 查看系统日志
不同系统日志位置略有差异:
# 如果用 systemd(Ubuntu 20+/22+ 默认)
journalctl -xe --since "10 minutes ago"
# 如果你知道大概出问题的时间段,可以指定时间
journalctl -xe --since "2025-09-09 12:30:00" --until "2025-09-09 12:40:00"重点留意里面是否有:
Out of memoryoom-killerkernel: Killed process ...- 服务器 CPU/内存 100% 导致 sshd/nginx 等服务暂时停顿
3. 看是否是机器直接重启了
如果怀疑整台服务器重启过,可以查开机时间:
uptime -s # 上次开机时间
last reboot # 重启记录如果时间点跟你掉线的时间一致,就是重启了。 如果没重启,但掉线,那就是 OOM 卡死,过一会内核恢复。
4. 查看服务级别的日志
比如你跑的网站用 pm2 / docker / systemd 托管:
-
Docker:
docker ps -a docker logs <container_id> -
PM2:
pm2 logs -
systemd service:
journalctl -u your-service-name --since "10 minutes ago"
✅ 总结:
- 先用
dmesg -T | grep -i -E "killed process|oom"确认是不是内存不足。 - 再用
journalctl对照具体时间看是否有 OOM Kill 或重启记录。 - 如果确认是 OOM,以后就需要 加 swap / 增内存 / 降低构建时内存占用
如何添加Swap?请参考👉这篇文章