温馨提示×

ubuntu为何nodejs日志满

小樊
38
2026-09-30 15:55:40
栏目: 编程语言

在 Ubuntu 上 Node.js 日志把磁盘写满,通常不是 Node.js 本身的问题,而是运行方式、日志配置或系统机制导致的。下面按常见原因给你梳理:


一、最常见原因

1️⃣ Node.js 应用自身不停写日志

  • console.log / console.error 写太多
  • 未限制日志级别(debug / verbose)
  • 异常循环、递归导致疯狂打印

✅ 检查:

du -sh /var/log/*
du -sh ~/.npm ~/.pm2/logs

2️⃣ PM2 日志没轮转(非常常见)

如果你用 PM2 跑 Node.js:

  • 默认日志在:~/.pm2/logs/
  • 不会自动清理
  • 长时间运行 → 日志几十 GB

✅ 解决:

pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

3️⃣ systemd 服务日志爆了(journald)

如果是 systemd 启动 Node.js:

journalctl -u your-node-service

journald 默认可能不限制大小

✅ 查看:

journalctl --disk-usage

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

SystemMaxUse=500M
SystemKeepFree=1G

然后:

systemctl restart systemd-journald

4️⃣ 未配置 log rotate

Ubuntu 用 logrotate 管理日志,但:

  • 自定义日志路径没配置
  • Node 直接写文件,绕过了 logrotate

✅ 示例 /etc/logrotate.d/nodejs:

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

5️⃣ 未捕获异常 + 无限重启

  • 应用崩溃 → 被 PM2 / docker / systemd 重启
  • 每次启动都打一堆错误日志

✅ 检查:

pm2 logs
journalctl -u node

6️⃣ Docker + Node.js(如果你用容器)

  • 容器 stdout 没限制
  • Docker json-file 日志无限增长

✅ 限制:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

二、快速定位是谁写的

# 看哪个目录最大
du -h /var/log | sort -h

# 看实时写入
sudo lsof | grep log

三、推荐最佳实践(总结)

✅ 不要直接 console.log 生产日志
✅ 用 winston / pino 等日志库
✅ 一定要配置 logrotate 或 pm2-logrotate
✅ systemd / docker 都要限制日志大小


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

  • 你怎么运行 Node(PM2 / systemd / Docker / 直接 node)
  • 日志在哪个路径
  • Ubuntu 版本

我可以帮你精确定位并给一套配置。

0 踩