在 Ubuntu 上 Node.js 日志“写满”(磁盘占满 / 日志文件巨大)通常由以下几类原因导致,你可以逐一排查:
Node.js 服务如果直接:
fs.appendFile('app.log', log)
或用了 console.log 重定向到文件:
node app.js >> app.log 2>&1
而没有 日志轮转,时间一长日志就会无限增长。
✅ 解决:
logrotatePM2 默认会把日志写在:
~/.pm2/logs/
包括:
app-out.logapp-error.log如果不清理,很容易几 GB。
✅ 查看:
du -sh ~/.pm2/logs/*
✅ 清理:
pm2 flush
✅ 限制大小:
pm2 start app.js --max-size 10M --retain 7
比如:
console.error 死循环✅ 排查:
tail -n 1000 app.log
看是不是同样错误重复几万次
例如:
promise.then(...) // 没 catch
Node 会打印 UnhandledPromiseRejection
✅ 解决:
process.on('unhandledRejection', e => {
// 记录一次即可
})
如果你用:
systemctl start node-app
journal 日志可能很大:
journalctl -u node-app
✅ 查看大小:
journalctl --disk-usage
✅ 清理:
journalctl --vacuum-size=100M
Docker 默认不限制日志:
/var/lib/docker/containers/
✅ 查看:
docker ps --format "{{.Names}}"
du -sh /var/lib/docker/containers/*
✅ 解决:
log-drivermax-sizedf -h
du -sh /* 2>/dev/null
du -sh /var/* 2>/dev/null
lsof | grep deleted
✅ 使用:
winston + DailyRotateFilepm2 logs --lines 0logrotate如果你愿意,可以告诉我:
我可以直接帮你定位是哪一类问题,并给出具体修复命令。