如果你出现(SSH 连不上 + 网站也挂了 + 过几分钟恢复),在小内存服务器上跑 next build 时非常常见,基本就是 服务器被 OOM(Out Of Memory)卡死/杀进程 了。

下面教你几种方法确认是不是“崩溃”以及从哪里看日志:


1. 看系统是否因为内存不足杀了进程(最重要)

1
2
# 查看内核日志里是否有 OOM Kill
dmesg -T | grep -i -E "killed process|out of memory|oom"

如果你看到类似:

1
[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. 查看系统日志

不同系统日志位置略有差异:

1
2
3
4
5
# 如果用 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 memory
  • oom-killer
  • kernel: Killed process ...
  • 服务器 CPU/内存 100% 导致 sshd/nginx 等服务暂时停顿

3. 看是否是机器直接重启了

如果怀疑整台服务器重启过,可以查开机时间:

1
2
uptime -s   # 上次开机时间
last reboot # 重启记录

如果时间点跟你掉线的时间一致,就是重启了。
如果没重启,但掉线,那就是 OOM 卡死,过一会内核恢复。


4. 查看服务级别的日志

比如你跑的网站用 pm2 / docker / systemd 托管:

  • Docker

    1
    2
    docker ps -a
    docker logs <container_id>
  • PM2

    1
    pm2 logs
  • systemd service

    1
    journalctl -u your-service-name --since "10 minutes ago"

总结:

  • 先用 dmesg -T | grep -i -E "killed process|oom" 确认是不是内存不足。
  • 再用 journalctl 对照具体时间看是否有 OOM Kill 或重启记录。
  • 如果确认是 OOM,以后就需要 加 swap / 增内存 / 降低构建时内存占用

如何添加Swap?请参考👉这篇文章