在 CentOS 上 Java 日志不断增大,通常不是系统本身的问题,而是 Java 应用、日志框架或运行环境配置不当 导致的。下面按常见原因和排查思路给你一个完整说明。
很多 Java 程序使用 Log4j / Log4j2 / Logback,如果配置不当,日志会一直追加到同一个文件。
典型问题:
RollingFileAppendermaxFileSize / maxHistoryDEBUG / TRACE)✅ 正确示例(Logback):
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/app/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
很多 CentOS 上 Java 进程的启动方式:
java -jar app.jar > app.log 2>&1
✅ 问题:
app.log 永远不会滚动✅ 解决方案:
cronolog / logrotate如果你开启了 GC 日志:
-Xloggc:/var/log/app/gc.log
Java 8 及之前默认 不会自动滚动。
✅ 推荐配置(Java 8):
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/app/gc_%p.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=10M
✅ Java 11+:
-Xlog:gc*:file=/var/log/app/gc.log:time,uptime,level,tags:filecount=5,filesize=10M
catalina.out ❌ 最容易无限增长localhost.logmanager.log原因:
catalina.out 接收 stdout + stderr✅ 解决方式:
logrotate即使程序写了日志,如果 没有 logrotate,文件也会越来越大。
✅ 检查:
ls /etc/logrotate.d/
✅ 示例(Java 应用):
/var/log/app/*.log {
daily
rotate 7
missingok
notifempty
compress
copytruncate
}
典型表现:
✅ 排查:
tail -f app.log
✅ 常见原因:
du -sh /var/log/*
ps -ef | grep java
tail -f app.log
ps -ef | grep Xloggc
CentOS 上 Java 日志增大的根本原因通常是:日志配置不合理 + 没有滚动策略 + 没有 logrotate。
如果你愿意,可以告诉我:
我可以直接帮你给出 可落地的完整配置方案。