温馨提示×

如何定位nodejs linux报错

小樊
44
2026-10-05 12:38:15
栏目: 编程语言

在 Linux 上定位 Node.js 报错,通常可以从错误信息、日志、进程状态、系统资源、代码层面几个方向入手。下面给你一套实用流程。


一、先看报错本身(最直接)

1. 终端报错信息

Node.js 报错一般会打印:

  • 错误类型(Error / TypeError / ReferenceError)
  • 堆栈信息(stack trace)
  • 出错的文件 + 行号

示例:

TypeError: Cannot read properties of undefined (reading 'id')
    at getUser (/app/service/user.js:23:15)

✅ 重点看:

  • 最后一行你自己代码的文件
  • 行号
  • 错误类型

二、确认运行方式(很重要)

2. 你是怎么跑的?

不同方式报错位置不同:

运行方式 看哪里
node app.js 终端直接看
npm start 看 npm 输出
PM2 pm2 logs
Docker docker logs 容器名
systemd journalctl -u 服务名

三、查看日志(生产环境必备)

3. 应用日志

如果有日志库(winston / pino / log4js):

tail -f logs/error.log

4. PM2 日志

pm2 logs
pm2 logs appname --err

5. Docker

docker logs -f 容器名
docker logs --tail 100 容器名

6. systemd

journalctl -u node-app -f

四、确认是不是“崩了”还是“卡了”

7. 进程是否存在

ps -ef | grep node
top
htop

8. 内存 / CPU 爆了?

free -h
df -h

Node.js 常见崩溃原因:

  • 内存泄漏(OOM)
  • 死循环
  • 未捕获异常

五、未捕获异常(最容易漏)

9. 加全局捕获(强烈建议)

process.on('uncaughtException', (err) => {
  console.error('未捕获异常:', err);
});

process.on('unhandledRejection', (reason) => {
  console.error('未处理的 Promise 拒绝:', reason);
});

六、调试(定位复杂问题)

10. 本地 / 服务器 debug

node --inspect app.js

然后用 Chrome:

chrome://inspect

11. 打印关键信息

console.log(JSON.stringify(data, null, 2));

七、常见 Node.js Linux 报错速查

报错 原因
EADDRINUSE 端口被占用
EACCES 权限不足(如 80 端口)
MODULE_NOT_FOUND 依赖没装
ENOENT 文件/路径不存在
SyntaxError 代码语法错误
heap out of memory 内存溢出

八、定位思路总结(记住这个顺序)

  1. 看报错堆栈
  2. 确认运行方式
  3. 查对应日志
  4. 看进程 & 资源
  5. 加异常捕获
  6. 必要时 debug

如果你愿意,可以把具体报错信息或运行方式贴出来,我可以直接帮你定位是哪一类的 Node.js 问题。

0 踩