温馨提示×

为什么ubuntu nodejs日志满

小樊
44
2026-10-03 13:45:49
栏目: 编程语言

在 Ubuntu 上 Node.js 日志把磁盘写满,通常不是 Node.js 本身的 bug,而是运行方式 + 日志配置 + 系统机制共同作用的结果。下面按常见原因从高到低说明,并给出对应解决办法。


一、最常见原因

1️⃣ Node.js 在前台运行,日志被 systemd / nohup 无限追加

很多人这样跑:

node app.js > app.log 2>&1 &
# 或
nohup node app.js &

结果:

  • app.log 或 nohup.out 永远不轮转
  • 报错、console.log 一直写
  • 几天后磁盘 100%

✅ 解决:

# 使用 systemd(推荐)
sudo journalctl -u your-service

# 或限制日志大小
node app.js >> app.log 2>&1
logrotate 配置 maxsize

2️⃣ 没有日志轮转(logrotate 缺失)

Ubuntu 默认 不会自动轮转你自己写的日志文件。

例如:

/var/log/myapp.log

如果没有 logrotate 配置:

  • 文件只增不减
  • 最终占满磁盘

✅ 解决(示例):

sudo nano /etc/logrotate.d/myapp
/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

3️⃣ console.log / console.error 滥用

常见问题:

console.log(req, res, user, token)

或:

catch (e) {
  console.error(e)
}

在高频接口中:

  • 每秒几百次日志
  • 很快写爆磁盘

✅ 解决:

  • 用 winston / pino / bunyan
  • 设置日志级别
  • 生产环境关掉 debug

4️⃣ PM2 日志没清理

如果你用 PM2:

~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log

默认 不会自动删除

✅ 解决:

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

5️⃣ 崩溃循环(crash loop)

代码异常 → Node 退出 → 守护进程重启 → 又报错

日志示例:

Error: ...
at ...
(node:123) ...

每秒几十次,很快满盘。

✅ 解决:

  • 看真实错误
  • 加健康检查
  • 限制重启频率

6️⃣ /var/log/systemd/journal 满(间接原因)

systemd journal 满也会影响 Node 服务

检查:

journalctl --disk-usage

清理:

sudo journalctl --vacuum-size=200M

二、快速排查命令(强烈推荐)

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

# 看大文件
find / -type f -size +100M

# Node 相关日志
journalctl -u your-node-service
ls -lh ~/.pm2/logs

三、推荐的生产级做法(总结)

✅ 使用 systemd + journald
✅ 或 PM2 + pm2-logrotate
✅ 禁止 console.log 直接打生产
✅ 所有日志必须 轮转 + 压缩 + 保留天数
✅ 磁盘监控(如 node-exporter / df 告警)


如果你愿意,可以把下面信息发我,我可以精确判断是哪一种:

  • 你是怎么启动 Node 的(命令 / PM2 / Docker)
  • 日志路径
  • df -h 和 du -sh /var/log/* 输出

0 踩