温馨提示×

centos为何java日志满

小樊
40
2026-09-27 06:44:00
栏目: 编程语言

在 CentOS 上“Java 日志把磁盘写满”是非常常见的问题,通常不是 CentOS 本身的问题,而是 Java 应用、日志框架或系统配置 导致的。下面按常见原因 → 排查方法 → 解决建议来说明。


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

1️⃣ 日志级别设置过低

  • DEBUG / TRACE 级别在生产环境开启
  • 高并发下日志量呈指数增长

✅ 典型表现:

  • application.log 几分钟几个 GB
  • CPU 占用也高

✅ 解决:

# logback / log4j2
<root level="INFO">

2️⃣ 没有日志轮转(Log Rotation)

很多 Java 程序:

  • 自己写日志文件
  • 或用了 nohup java > app.log

结果:

  • 一个文件无限增长
  • 磁盘直接 100%

✅ 解决方式:

方式一:使用 logrotate(推荐)

/etc/logrotate.d/myapp

示例:

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

方式二:使用日志框架自带滚动

  • Logback:RollingFileAppender
  • Log4j2:RollingFile

3️⃣ 异常被疯狂打印(死循环 / 重试)

例如:

  • 网络超时
  • MQ 消费失败
  • 定时任务异常
catch (Exception e) {
    log.error("error", e);
}

✅ 表现:

  • 同一异常每秒几百次
  • 日志暴涨

✅ 解决:

  • 加熔断 / 限流
  • 异常日志降频
  • 避免打印大对象

4️⃣ JVM 自身日志未限制

以下日志都可能爆炸:

  • GC 日志
-Xloggc:/var/log/gc.log
  • 没有 -XX:+UseGCLogFileRotation

✅ 正确写法:

-Xloggc:/var/log/gc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=100M

5️⃣ Tomcat / Spring Boot 默认日志问题

  • catalina.out 无限增长
  • Spring Boot 未配置滚动

✅ 解决:

  • catalina.out 用 logrotate
  • Spring Boot:
logging:
  file:
    max-size: 100MB
    max-history: 7

6️⃣ /var 或 / 分区过小

CentOS 默认:

  • /var 可能只有 10–20G
  • Java 日志一般都在 /var/log

✅ 排查:

df -h
du -sh /var/log/*

二、快速排查命令(很实用)

# 看哪个目录最大
du -sh /* 2>/dev/null

# 看 Java 进程
ps -ef | grep java

# 实时看日志增长
watch -n 1 'ls -lh /var/log/app.log'

# 看磁盘
df -h

三、总结一句话

CentOS 上 Java 日志满,99% 是因为:日志没轮转 + 日志级别太低 + 异常狂打


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

  • Java 应用类型(Spring Boot / 普通 Jar / Tomcat)
  • 日志框架(logback / log4j2)
  • 日志路径

我可以帮你 直接写一份可用的 logrotate 或日志配置。

0 踩