在 Ubuntu 上 Node.js 日志“暴涨”通常是写日志太频繁 / 没轮转 / 异常被循环打印 / 内存泄漏导致错误风暴这几类原因。下面按最常见到少见的顺序帮你梳理,并给出排查和处理办法。
Node.js 自己一般不会自动切割日志,如果你用:
node app.js > app.log 2>&1
日志会一直追加,文件越来越大。
✅ 解决:
logrotatepm2(自带日志管理)示例 logrotate:
/var/log/nodeapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
例如:
setInterval(() => {
try {
doSomething()
} catch (e) {
console.error(e)
}
}, 10)
一旦 doSomething 一直报错,日志会每秒几千条。
✅ 排查:
tail -f app.log
看是不是同一条错误反复出现。
✅ 解决:
console.log:
✅ 建议:
PM2 默认:
out.logerror.log如果你又自己写文件日志,就会两份日志。
✅ 查看:
pm2 logs
pm2 info <id>
✅ 配置:
pm2 set pm2:log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 install pm2-logrotate
如果:
✅ 看:
journalctl -u your-node-service
Node 输出到 stdout,systemd 会记录:
journalctl -u node.service
✅ 限制:
[Service]
StandardOutput=append:/var/log/node/app.log
内存涨 → 报错 → 日志暴涨。
✅ 排查:
node --inspect
或:
pm2 monit
# 1. 看哪个日志最大
du -sh /var/log/*
# 2. 看实时日志
tail -f app.log
# 3. 看 Node 进程
ps aux | grep node
# 4. 看系统日志
journalctl -u your-node.service --since "1 hour ago"
你可以告诉我:
我可以直接帮你定位是哪一行代码或配置在疯狂写日志。