温馨提示×

ubuntu nodejs日志为何变大

小樊
35
2026-09-15 16:40:23
栏目: 编程语言

在 Ubuntu 上 Node.js 日志变大的原因通常可以归纳为以下几类,从最常见到较少见:


1. 应用自身不断写日志(最常见)

  • console.log / console.error 滥用
    • 开发时为了方便大量打印,上线后没关
    • 请求量一大,日志迅速膨胀
  • 未做日志级别控制
    • 总是输出 debug / info
  • 异常被捕获后又打印
    • try/catch + console.error + 框架日志重复记录

✅ 解决:

  • 使用日志库(winston / pino / bunyan)
  • 设置日志级别(production 用 warn / error
  • 避免循环或高频日志

2. 日志没有轮转(Log Rotation 缺失)

Ubuntu 默认 不会自动清理你应用自己写的日志文件

常见问题:

  • 日志写到一个文件(如 app.log
  • 从不切割
  • 文件越来越大(几 GB 甚至几十 GB)

✅ 解决:

  • 使用 logrotate
sudo nano /etc/logrotate.d/node-app

示例:

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

或使用日志库自带的 rotate 功能。


3. systemd 日志(journald)膨胀

如果你用:

systemctl start yourapp

Node.js 输出会进入 systemd journal

表现:

  • /var/log/journal 很大
  • journalctl 非常慢

✅ 解决:

journalctl --disk-usage
sudo journalctl --vacuum-size=200M

限制大小:

sudo nano /etc/systemd/journald.conf
SystemMaxUse=500M

4. 未捕获异常 / 内存泄漏

  • unhandledRejection
  • 死循环写日志
  • 每秒几千次错误日志

表现:

  • 日志短时间暴涨
  • 可能伴随 CPU 100%

✅ 解决:

process.on('unhandledRejection', e => {
  console.error(e);
});

并修复根本逻辑问题。


5. 被攻击或异常流量

  • 爬虫 / 扫描器狂刷接口
  • 每个请求都写日志

✅ 解决:

  • 限流
  • Nginx 层拦截
  • 不在错误请求中打印完整 body

6. Docker / PM2 日志未清理(如果你用了)

PM2

pm2 logs

日志在:

~/.pm2/logs/

Docker

docker system df
docker system prune

快速排查命令

# 看哪个日志大
sudo du -sh /var/log/*

# Node 应用日志
ls -lh /path/to/your/log

# systemd 日志大小
journalctl --disk-usage

如果你愿意,可以告诉我:

  • 日志是 文件 / systemd / Docker
  • 用的什么启动方式(PM2 / systemd / nginx)
  • 日志路径或示例内容

我可以直接帮你写 logrotate 配置改代码方案

0