在 Ubuntu 上 Node.js 日志把磁盘写满,通常不是 Node.js 本身的 bug,而是运行方式 + 日志配置 + 系统机制共同作用的结果。下面按常见原因从高到低说明,并给出对应解决办法。
很多人这样跑:
node app.js > app.log 2>&1 &
# 或
nohup node app.js &
结果:
app.log 或 nohup.out 永远不轮转✅ 解决:
# 使用 systemd(推荐)
sudo journalctl -u your-service
# 或限制日志大小
node app.js >> app.log 2>&1
logrotate 配置 maxsize
Ubuntu 默认 不会自动轮转你自己写的日志文件。
例如:
/var/log/myapp.log
如果没有 logrotate 配置:
✅ 解决(示例):
sudo nano /etc/logrotate.d/myapp
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
常见问题:
console.log(req, res, user, token)
或:
catch (e) {
console.error(e)
}
在高频接口中:
✅ 解决:
winston / pino / bunyan如果你用 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
代码异常 → Node 退出 → 守护进程重启 → 又报错
日志示例:
Error: ...
at ...
(node:123) ...
每秒几十次,很快满盘。
✅ 解决:
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 告警)
如果你愿意,可以把下面信息发我,我可以精确判断是哪一种:
df -h 和 du -sh /var/log/* 输出