在 Debian 上 Node.js 日志“打满”磁盘/文件系统,通常不是 Node.js 本身的 bug,而是运行方式 + 日志配置 + 系统机制共同导致的。下面按常见原因从高到低说明,并给出排查与解决办法。
nohup / & 直接运行 Node,标准输出未重定向node app.js &
或
nohup node app.js &
问题:
console.log 会持续写入nohup.out如果应用有:
→ 日志迅速膨胀
✅ 解决
node app.js > /var/log/node/app.log 2>&1
并配合 logrotate
如果你用:
systemctl start mynode
Node 的 console.log 会被 systemd-journald 捕获
Storage=auto/persistentjournalctl -u your-node.service
du -sh /var/log/journal
编辑:
/etc/systemd/journald.conf
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=7day
然后:
systemctl restart systemd-journald
setInterval(() => {
throw new Error('xxx')
}, 100)
或 Promise 未 catch:
async function f() {
throw new Error('oops')
}
f()
→ 每秒几十/几百条错误日志
✅ 解决
process.on('uncaughtException')process.on('unhandledRejection')即使日志写文件,也不会自动清理
ls -lh /var/log/node/
/var/log/node/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
pm2 logs
默认日志在:
~/.pm2/logs/
✅ 限制:
pm2 start app.js --log-date-format "YYYY-MM-DD" --max-memory-restart 300M
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
/var 分区小(尤其是云镜像)logrotate 某些 minimal 镜像rsyslog + journal 双写# 看哪个文件最大
du -sh /var/log/*
# 看 node 进程
ps aux | grep node
# 看 journal
journalctl --disk-usage
# 看打开的文件
lsof | grep node
Debian 上 Node.js 日志满,本质不是 Node 的问题,而是:
日志没重定向 + 没轮转 + 没限大小 + 异常狂打
如果你愿意,可以贴:
systemd / pm2 / nohup)我可以帮你精准定位并给一套配置。