温馨提示×

centos java日志为何占用过高

小樊
43
2026-09-12 00:34:13
栏目: 编程语言

在 CentOS 上 Java 日志占用过高,通常不是“磁盘空间突然没了”,而是日志产生速度远大于清理速度。下面按最常见原因 → 排查方法 → 解决建议给你一个清晰清单。


一、最常见原因(占 90% 以上)

1️⃣ 应用日志级别太低(DEBUG / INFO)

很多 Java 程序默认:

  • log4j / logback 级别是 DEBUG
  • 高并发时每秒产生几 MB 日志

表现

  • /var/log 或应用目录快速增长
  • 磁盘 %util 很高

✅ 解决:

<root level="INFO">

logging.level.root=WARN

2️⃣ 没有日志切割(log rotate 没生效)

常见情况:

  • 直接用 System.out.println
  • 日志写到文件但未配置 rolling

结果:

  • 单个 app.log 几十 GB

✅ 解决:

  • 使用 logback / log4j2RollingFileAppender
  • 或配置 Linux logrotate
/opt/app/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

3️⃣ 异常被“疯狂打印”

典型代码问题:

catch (Exception e) {
    e.printStackTrace();
}

在高并发下:

  • 每秒几千次异常
  • 日志爆炸

✅ 解决:

  • 用日志框架
  • 控制异常日志频率

4️⃣ GC 日志未限制

JVM 参数类似:

-Xloggc:/var/log/gc.log

但:

  • 没加 -XX:+UseGCLogFileRotation
  • 或滚动配置不合理

✅ 推荐:

-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=20M

5️⃣ Docker / 容器日志未限制(如果你用容器)

Docker 默认:

  • json-file 不限制大小

✅ 解决:

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

二、快速排查命令(CentOS)

看哪个目录最大

du -sh /* 2>/dev/null
du -sh /var/log/*

看实时增长

watch -n 1 "ls -lh /opt/app/logs"

看 Java 进程

ps -ef | grep java

看磁盘

df -h
iostat -x 1

三、总结一句话

CentOS 上 Java 日志占用过高,99% 是:日志级别太低 + 没切割 + 异常狂打

如果你愿意,可以把:

  • Java 版本
  • 用的日志框架(log4j / logback)
  • 日志路径

发我,我可以帮你直接给一份可用配置

0