温馨提示×

Nodejs日志为何占Debian空间

小樊
32
2026-08-23 20:51:38
栏目: 云计算

Node.js 日志占用 Debian 系统空间,通常不是 Node.js 本身的问题,而是日志没有被限制、轮转或清理导致的。下面按常见原因和排查/解决方法来说明。


一、常见原因

1. 应用日志无限增长

Node.js 应用(如 Express、NestJS、Koa)常使用日志库:

  • winston
  • pino
  • morgan
  • bunyan

如果配置不当,日志会一直追加到同一个文件,例如:

/var/log/myapp/app.log

时间久了可能达到 几 GB 甚至几十 GB


2. 日志输出到 stdout,被 systemd 接管

如果你用 systemd 管理 Node.js 服务:

[Service]
ExecStart=/usr/bin/node app.js

Node.js 的 console.log() 会被 systemd 记录到:

/var/log/syslog
/var/log/messages
/journal/

journal 日志默认不限制大小,很容易占满磁盘。


3. PM2 日志未清理

使用 PM2 时,默认日志位置:

~/.pm2/logs/

包括:

  • app-out.log
  • app-error.log

PM2 不会自动清理旧日志


4. Docker + Node.js

如果是 Docker 环境:

  • 容器日志未限制
  • 日志写入容器可写层
  • json-file 驱动未配置 max-size

也会导致 Debian 磁盘爆满。


5. 未启用日志轮转(logrotate)

Debian 默认不会自动轮转你自己的应用日志文件,除非你配置 logrotate


二、快速排查方法

1️⃣ 查看磁盘占用

df -h

2️⃣ 找出大文件

du -h /var/log | sort -hr | head -20

或全局查找:

find / -xdev -type f -size +100M

3️⃣ 检查 systemd journal 大小

journalctl --disk-usage

如显示几百 MB / GB,说明 journal 是元凶。


4️⃣ 检查 PM2 日志

du -sh ~/.pm2/logs

三、解决方案

✅ 方案一:限制 systemd journal 大小

编辑:

sudo vim /etc/systemd/journald.conf

设置:

SystemMaxUse=200M
RuntimeMaxUse=100M

重启:

sudo systemctl restart systemd-journald

✅ 方案二:配置 logrotate(推荐)

示例(Node.js 应用日志):

sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

✅ 方案三:PM2 日志管理

安装 PM2 日志插件:

pm2 install pm2-logrotate

设置:

pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7

✅ 方案四:Node.js 日志库配置

例如 winston

new winston.transports.File({
  filename: 'app.log',
  maxsize: 10485760, // 10MB
  maxFiles: 5
})

✅ 方案五:Docker 日志限制

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

四、总结一句话

Node.js 日志占 Debian 空间,本质原因是:日志只写不删、不轮转、不限制大小。

如果你愿意,可以把以下信息发我,我可以给你更精确的方案:

  • 是否使用 systemd / PM2 / Docker
  • 日志路径
  • Node.js 框架和日志库
  • df -h 输出

0