温馨提示×

ubuntu nodejs崩溃如何排查

小樊
49
2026-09-19 00:35:08
栏目: 编程语言

在 Ubuntu 上排查 Node.js 崩溃,一般可以从日志、错误类型、系统资源、代码层面逐步入手。下面给你一套比较实用的排查思路。


一、先看崩溃时的直接信息

1. 查看终端 / 启动日志

如果是前台运行:

node app.js

崩溃时通常会输出:

  • Error: ...
  • TypeError: ...
  • RangeError: ...
  • Segmentation fault (core dumped)

如果是后台运行(pm2 / systemd / nohup),看对应日志。


二、常见崩溃类型 & 对应排查方式

1. JavaScript 异常(最常见)

例如:

TypeError: Cannot read properties of undefined

✅ 排查:

  • 查看完整 stack trace
  • 定位到具体文件和行号
  • 检查异步回调、Promise、undefined 参数

✅ 建议:

process.on('uncaughtException', (err) => {
  console.error('uncaughtException', err);
});
process.on('unhandledRejection', (reason) => {
  console.error('unhandledRejection', reason);
});

2. 内存溢出(OOM)

错误示例:

FATAL ERROR: Ineffective mark-compacts near heap limit

✅ 排查:

node --max-old-space-size=4096 app.js

查看内存使用:

top
htop

或代码中:

console.log(process.memoryUsage());

✅ 常见原因:

  • 大数组 / 大对象未释放
  • 内存泄漏
  • 无限循环

3. Segmentation fault(C++ 层崩溃)

Segmentation fault (core dumped)

✅ 可能原因:

  • 原生模块(C++ addon)
  • 不兼容的 node 版本
  • 损坏的 .node 文件

✅ 排查:

node -v
npm ls
ldd your_module.node

4. 系统资源不足

Ubuntu 可能被系统杀掉:

dmesg | grep -i killed

或:

journalctl -xe

✅ 常见:

  • 内存不足(OOM Killer)
  • 文件描述符耗尽

查看限制:

ulimit -a

三、使用日志工具排查

1. PM2(强烈推荐)

pm2 logs
pm2 monit
pm2 describe <id>

2. systemd 服务

journalctl -u your-node-service -f

四、生成并分析 Core Dump(高级)

1. 开启 core dump

ulimit -c unlimited

2. 崩溃后定位

ls -lh core*

3. 用 gdb 分析

gdb node core

五、快速排查清单 ✅

  • [ ] 看终端 / 日志报错
  • [ ] 是否 OOM(dmesg)
  • [ ] 是否 Segmentation fault
  • [ ] node 版本是否匹配
  • [ ] 是否有未捕获异常
  • [ ] 是否原生模块问题
  • [ ] 是否资源限制(内存 / 文件数)

如果你愿意,可以把具体报错信息或运行方式(pm2 / docker / systemd)发出来,我可以直接帮你定位原因。

0 踩