温馨提示×

nodejs ubuntu日志为何满盘

小樊
47
2026-09-03 11:06:00
栏目: 编程语言

在 Ubuntu 上 Node.js 服务导致日志写满磁盘,通常不是 Node.js 本身的问题,而是日志没有被轮转(log rotate)、错误无限打印、或进程异常导致的。下面按常见原因逐一说明,并给出排查和解决办法。


一、最常见原因

1️⃣ 没有日志轮转(logrotate 未配置)

Node.js 默认不会自动切割日志,如果直接:

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

日志会一直追加,最终写满磁盘。

✅ 解决:

  • 使用 logrotate
  • 或使用 pm2 logs + pm2 flush
  • 或日志库自带 rotate(如 winston / pino)

2️⃣ 异常错误被无限打印(死循环 / 高频异常)

例如:

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

错误每秒几千次,很快写满。

✅ 排查:

tail -n 1000 yourapp.log

如果你看到同样错误疯狂刷屏,就是这个原因。

✅ 解决:

  • 限制错误日志频率
  • 关键错误才记录
  • 使用 Sentry / 监控

3️⃣ PM2 日志未清理

PM2 默认日志在:

~/.pm2/logs/

如果运行很久不清理,会非常大。

✅ 查看:

du -sh ~/.pm2/logs

✅ 清理:

pm2 flush

✅ 配置轮转:

pm2 install pm2-logrotate

4️⃣ systemd journal 日志暴涨

如果你用 systemd 启动 Node:

journalctl -u your-node.service

journal 可能无限增长。

✅ 查看磁盘占用:

journalctl --disk-usage

✅ 限制大小(/etc/systemd/journald.conf):

SystemMaxUse=500M

然后:

systemctl restart systemd-journald

5️⃣ Docker 容器日志(如果你用 Docker)

Docker 默认不限制日志大小。

✅ 查看:

docker ps
docker logs --tail 100 container_id

✅ 解决:

  • 配置 log-driver
  • 限制 max-size

二、快速排查步骤(推荐顺序)

# 1. 看哪个目录最大
du -h /var/log
du -sh ~

# 2. 看 Node 日志
ls -lh ~/.pm2/logs

# 3. 看系统日志
journalctl --disk-usage

# 4. 看具体日志内容
tail -f yourapp.log

三、标准做法(避免再次发生)

Node 日志最佳实践

  • winston / pino
  • 开启文件 rotate
  • 不打印整个 error stack 到文件(只关键错误)

运行方式

  • PM2 + pm2-logrotate
  • 或 Docker + log limit
  • 或 systemd + journald 限制

如果你愿意,可以告诉我:

  • 你是怎么运行 Node 的(pm2 / systemd / docker / 直接 node)
  • 日志路径
  • Ubuntu 版本

我可以直接帮你写 logrotate 配置 / pm2 配置 / systemd 配置

0