温馨提示×

为何debian nodejs日志满

小樊
36
2026-10-21 18:39:22
栏目: 编程语言

在 Debian 上 Node.js 日志“打满”磁盘/文件系统,通常不是 Node.js 本身的 bug,而是运行方式 + 日志配置 + 系统机制共同导致的。下面按常见原因从高到低说明,并给出排查与解决办法。


一、最常见原因(80% 情况)

1. 使用 nohup / & 直接运行 Node,标准输出未重定向

node app.js &

或

nohup node app.js &

问题:

  • console.log 会持续写入
  • 日志可能写到:
    • nohup.out
    • 当前终端的 pts
    • systemd journal(若被捕获)

如果应用有:

  • 高频日志
  • 异常循环打印
  • 未捕获异常反复抛出

→ 日志迅速膨胀

✅ 解决

node app.js > /var/log/node/app.log 2>&1

并配合 logrotate


二、systemd 场景下 journal 日志爆炸(非常常见)

如果你用:

systemctl start mynode

Node 的 console.log 会被 systemd-journald 捕获

常见爆点

  • Storage=auto/persistent
  • 未限制 journal 大小
  • Node 高频日志

检查

journalctl -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')
  • 使用日志库(winston / pino)

四、没有日志轮转(logrotate 缺失)

即使日志写文件,也不会自动清理

检查

ls -lh /var/log/node/

配置 logrotate 示例

/var/log/node/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  copytruncate
}

五、Docker / PM2 / Nginx 反代场景

PM2

pm2 logs

默认日志在:

~/.pm2/logs/

✅ 限制:

pm2 start app.js --log-date-format "YYYY-MM-DD" --max-memory-restart 300M

Docker

  • stdout 没限制
  • docker json-file 驱动爆盘
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

六、Debian 特有注意点

  • /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)
  • 日志路径
  • Node 版本

我可以帮你精准定位并给一套配置。

0 踩