温馨提示×

ubuntu nodejs日志为何暴涨

小樊
43
2026-10-27 00:15:14
栏目: 编程语言

在 Ubuntu 上 Node.js 日志“暴涨”通常是写日志太频繁 / 没轮转 / 异常被循环打印 / 内存泄漏导致错误风暴这几类原因。下面按最常见到少见的顺序帮你梳理,并给出排查和处理办法。


一、最常见原因

1. 日志没有轮转(log rotate 没配置)

Node.js 自己一般不会自动切割日志,如果你用:

node app.js > app.log 2>&1

日志会一直追加,文件越来越大。

✅ 解决:

  • 用 logrotate
  • 或用 pm2(自带日志管理)
  • 或写日志到按日期命名的文件

示例 logrotate:

/var/log/nodeapp/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  copytruncate
}

2. 异常被无限打印(错误风暴)

例如:

setInterval(() => {
  try {
    doSomething()
  } catch (e) {
    console.error(e)
  }
}, 10)

一旦 doSomething 一直报错,日志会每秒几千条。

✅ 排查:

tail -f app.log

看是不是同一条错误反复出现。

✅ 解决:

  • 加错误限流
  • 只在关键错误时记日志
  • 用 Winston / Pino 的日志级别

3. 使用了 console.log 而不是日志库

console.log:

  • 同步
  • 不走级别
  • 生产环境极易失控

✅ 建议:

  • Winston
  • Pino
  • Bunyan

二、进程 / 运行方式问题

4. PM2 日志翻倍

PM2 默认:

  • out.log
  • error.log

如果你又自己写文件日志,就会两份日志。

✅ 查看:

pm2 logs
pm2 info <id>

✅ 配置:

pm2 set pm2:log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 install pm2-logrotate

5. 程序被反复重启

如果:

  • 崩溃 → 重启 → 崩溃 每次启动都打一堆日志。

✅ 看:

journalctl -u your-node-service

三、系统 / 环境问题

6. systemd 日志暴涨(journald)

Node 输出到 stdout,systemd 会记录:

journalctl -u node.service

✅ 限制:

[Service]
StandardOutput=append:/var/log/node/app.log

7. 内存泄漏 → GC 日志 / 错误日志

内存涨 → 报错 → 日志暴涨。

✅ 排查:

node --inspect

或:

pm2 monit

四、快速自查清单(建议你照着做)

# 1. 看哪个日志最大
du -sh /var/log/*

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

# 3. 看 Node 进程
ps aux | grep node

# 4. 看系统日志
journalctl -u your-node.service --since "1 hour ago"

五、我可以进一步帮你

你可以告诉我:

  1. 用的是 pm2 / systemd / 直接 node
  2. 日志是 stdout 还是文件
  3. 日志内容大概长什么样(贴几行)

我可以直接帮你定位是哪一行代码或配置在疯狂写日志。

0 踩