Node.js 日志占用 Debian 系统空间,通常不是 Node.js 本身的问题,而是日志没有被限制、轮转或清理导致的。下面按常见原因和排查/解决方法来说明。
Node.js 应用(如 Express、NestJS、Koa)常使用日志库:
winstonpinomorganbunyan如果配置不当,日志会一直追加到同一个文件,例如:
/var/log/myapp/app.log
时间久了可能达到 几 GB 甚至几十 GB。
如果你用 systemd 管理 Node.js 服务:
[Service]
ExecStart=/usr/bin/node app.js
Node.js 的 console.log() 会被 systemd 记录到:
/var/log/syslog
/var/log/messages
/journal/
journal 日志默认不限制大小,很容易占满磁盘。
使用 PM2 时,默认日志位置:
~/.pm2/logs/
包括:
app-out.logapp-error.logPM2 不会自动清理旧日志。
如果是 Docker 环境:
json-file 驱动未配置 max-size也会导致 Debian 磁盘爆满。
Debian 默认不会自动轮转你自己的应用日志文件,除非你配置 logrotate。
df -h
du -h /var/log | sort -hr | head -20
或全局查找:
find / -xdev -type f -size +100M
journalctl --disk-usage
如显示几百 MB / GB,说明 journal 是元凶。
du -sh ~/.pm2/logs
编辑:
sudo vim /etc/systemd/journald.conf
设置:
SystemMaxUse=200M
RuntimeMaxUse=100M
重启:
sudo systemctl restart systemd-journald
示例(Node.js 应用日志):
sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
安装 PM2 日志插件:
pm2 install pm2-logrotate
设置:
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
例如 winston:
new winston.transports.File({
filename: 'app.log',
maxsize: 10485760, // 10MB
maxFiles: 5
})
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Node.js 日志占 Debian 空间,本质原因是:日志只写不删、不轮转、不限制大小。
如果你愿意,可以把以下信息发我,我可以给你更精确的方案:
systemd / PM2 / Dockerdf -h 输出