温馨提示×

ubuntu nodejs为何崩溃

小樊
40
2026-09-28 01:33:35
栏目: 编程语言

在 Ubuntu 上 Node.js 进程“崩溃”通常不是单一原因,而是几类常见问题之一。下面按最常见 → 较少见的顺序说明,并给出排查方法。


一、最常见原因

1️⃣ 内存不足(OOM)

现象

  • 进程突然退出
  • 日志中无错误,或只有 Killed
  • dmesg 里有 Out of memory

原因

  • 内存泄漏
  • 默认堆内存太小(约 1.5–2GB)
  • 服务器内存本身很小

排查

dmesg | grep -i "oom\|killed"
free -h

解决

  • 增大内存限制:
node --max-old-space-size=2048 app.js
  • 优化代码(闭包、缓存、监听器等)

2️⃣ 未捕获异常 / Promise 未处理

现象

  • 进程直接退出
  • 日志中有 Uncaught Error
  • 或没有任何日志

常见错误

throw new Error('x') // 没有 try/catch
promise.then(...) // 没有 .catch

解决

process.on('uncaughtException', e => {
  console.error(e);
  process.exit(1);
});

process.on('unhandledRejection', e => {
  console.error(e);
});

3️⃣ 端口被占用 / 权限问题

现象

EADDRINUSE
EACCES

原因

  • 端口已被占用
  • 非 root 用户绑定 80/443

排查

lsof -i:3000

二、系统 & 环境问题

4️⃣ Node.js 版本不兼容

现象

  • 启动即崩溃
  • 报错 GLIBC_2.x not found

原因

  • Ubuntu 太老
  • Node 版本太新

建议

node -v
cat /etc/os-release

使用 LTS 版本(推荐 18 / 20)


5️⃣ 依赖问题

现象

  • Cannot find module
  • Segmentation fault

解决

rm -rf node_modules package-lock.json
npm install

使用 npm ci 更稳妥。


三、服务管理问题(PM2 / systemd)

6️⃣ PM2 崩溃但你看不到日志

pm2 logs
pm2 describe app

7️⃣ systemd 限制

MemoryMax=512M

查看:

journalctl -u your-service

四、CPU / 原生模块问题

8️⃣ 原生模块崩溃(C++)

  • bcrypt
  • sharp
  • sqlite3

现象

Segmentation fault (core dumped)

解决

  • 重新编译
  • 使用官方预编译版本

五、快速排查清单 ✅

node -v
free -h
dmesg | tail
journalctl -xe
pm2 logs

六、如果你愿意

你可以贴出:

  • 报错信息(完整)
  • 启动方式(node / pm2 / docker)
  • Ubuntu 版本
  • Node 版本

我可以精准定位是哪一种崩溃原因。

0 踩