Node.js 日志把 Debian 磁盘占满,通常不是“Node 本身”的问题,而是日志没有被正确限制或轮转导致的。下面按最常见原因 → 排查方法 → 解决办法说明。
很多 Node 服务这么写:
fs.appendFileSync('app.log', log)
或用了 winston / pino 但:
rotation结果:
app.log 越来越大✅ 检查:
du -sh /var/www/*/logs/*
du -sh ~/project/logs/*
如果你用 systemd 启动 Node:
[Service]
ExecStart=/usr/bin/node app.js
默认 journald 会存日志
journalctl -u your-node.service
如果没限制:
/var/log/journal 会爆炸✅ 检查:
du -sh /var/log/journal
比如:
setInterval(() => {
console.error(err)
}, 1)
或:
如果你用 Docker 跑 Node:
docker logs container_name
默认:
✅ 检查:
docker ps --size
Debian 默认:
/var/home/opt都在 / 上
一旦日志暴涨 → 整个系统挂
# 看哪个目录最大
du -h --max-depth=1 /
# 看 inode 是否耗尽(也很常见)
df -i
# 找大文件
find / -type f -size +100M
使用:
winston + winston-daily-rotate-filepino + pino-roll示例(pino):
import pino from 'pino'
const logger = pino({
transport: {
target: 'pino-roll',
options: { file: 'app.log', frequency: 'daily', size: '100M' }
}
})
sudo nano /etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=7day
然后:
sudo systemctl restart systemd-journald
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
sudo nano /etc/logrotate.d/node-app
/var/www/app/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
# 找到大日志
find / -type f -name "*.log" -size +500M
# 清空(不要删)
: > /path/to/big.log
Node.js 日志占满 Debian 盘,不是 Node 的锅,而是“日志无上限 + 无轮转 + 无监控”。
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。