在 Ubuntu 上 Node.js 服务导致日志写满磁盘,通常不是 Node.js 本身的问题,而是日志没有被轮转(log rotate)、错误无限打印、或进程异常导致的。下面按常见原因逐一说明,并给出排查和解决办法。
Node.js 默认不会自动切割日志,如果直接:
node app.js > app.log 2>&1
日志会一直追加,最终写满磁盘。
✅ 解决:
logrotatepm2 logs + pm2 flush例如:
setInterval(() => {
try {
doSomething()
} catch (e) {
console.error(e)
}
}, 1)
错误每秒几千次,很快写满。
✅ 排查:
tail -n 1000 yourapp.log
如果你看到同样错误疯狂刷屏,就是这个原因。
✅ 解决:
PM2 默认日志在:
~/.pm2/logs/
如果运行很久不清理,会非常大。
✅ 查看:
du -sh ~/.pm2/logs
✅ 清理:
pm2 flush
✅ 配置轮转:
pm2 install pm2-logrotate
如果你用 systemd 启动 Node:
journalctl -u your-node.service
journal 可能无限增长。
✅ 查看磁盘占用:
journalctl --disk-usage
✅ 限制大小(/etc/systemd/journald.conf):
SystemMaxUse=500M
然后:
systemctl restart systemd-journald
Docker 默认不限制日志大小。
✅ 查看:
docker ps
docker logs --tail 100 container_id
✅ 解决:
log-drivermax-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✅ 运行方式
pm2-logrotate如果你愿意,可以告诉我:
我可以直接帮你写 logrotate 配置 / pm2 配置 / systemd 配置。