温馨提示×

nodejs linux日志怎样排查错

小樊
39
2026-09-17 18:21:02
栏目: 编程语言

在 Linux 上排查 Node.js 日志和错误,一般按「看日志 → 看进程 → 看系统 → 看代码」的顺序来。下面给你一套实用排查思路。


一、先明确日志在哪里

1. 应用自身日志

常见位置:

  • 项目目录
    ./logs/
    ./log/
    
  • 使用 winstonpinolog4js 等框架
  • 控制台输出(stdout / stderr)

查看:

cat app.log
tail -f app.log
less app.log

2. PM2 管理的 Node 服务(最常见)

pm2 logs
pm2 logs app-name
pm2 logs --err   # 只看错误
pm2 describe app-name

3. 系统服务(systemd)

如果是 systemctl 启动:

journalctl -u your-node-service -f
journalctl -u your-node-service --since "10 min ago"

4. 容器(Docker)

docker logs -f container_id
docker logs --tail 100 container_id

二、常见错误类型 & 对应排查点

1. 启动就崩(立即退出)

看错误栈:

node app.js

常见原因:

  • 端口被占用
    lsof -i:3000
    netstat -tunlp | grep 3000
    
  • 配置文件缺失 / 环境变量未设置
  • 语法错误(Node 版本不兼容)

2. 运行中崩溃(未捕获异常)

日志中常见:

TypeError: Cannot read property 'x' of undefined
Error: connect ECONNREFUSED
UnhandledPromiseRejectionWarning

建议:

  • 加全局捕获
process.on('uncaughtException', e => {
  console.error('uncaught', e);
});
process.on('unhandledRejection', e => {
  console.error('unhandledRejection', e);
});

3. 内存溢出(OOM)

日志:

FATAL ERROR: Ineffective mark-compacts
JavaScript heap out of memory

排查:

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

长期解决:

  • 内存泄漏(闭包、全局变量、未释放定时器)
  • heapdump 分析

4. CPU 飙高

top
# 找到 node 进程 PID
pidstat -p PID 1

Node 层:

node --prof app.js
node --prof-process isolate-*.log

三、关键排查命令速查

# 实时看日志
tail -f app.log

# 看报错关键字
grep -i error app.log
grep -i exception app.log

# 看进程
ps aux | grep node
pm2 list

# 看端口
lsof -i:3000

# 看系统资源
top
free -h
df -h

四、推荐日志规范(避免难排查)

  • 区分 info / warn / error
  • 错误日志带:时间 + 请求ID + stack
  • 不要只 console.log
  • 生产用 PM2 + 日志切割

如果你愿意,可以把具体报错日志或启动方式(PM2 / Docker / systemd)发出来,我可以直接帮你定位。

0