在 CentOS 上 Java 日志过大 是很常见的问题,一般可以从 日志配置、切割、清理、监控 四个方面处理。下面按实用程度给你一套方案。
Java 日志过大,通常不是 JVM 本身,而是:
-Xloggc:先用命令看谁最大:
du -sh /var/log/*
du -sh ~/logs/*
find / -name "*.log" -size +100M
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
</appender>
✅ 效果:
适合 nohup.out、tomcat logs
示例 /etc/logrotate.d/java:
/opt/app/logs/*.log {
daily
rotate 7
size 100M
compress
missingok
notifempty
copytruncate
}
测试:
logrotate -d /etc/logrotate.d/java
⚠️ copytruncate 对 Java 进程友好
find /opt/app/logs -name "*.log.*" -mtime +7 -delete
crontab -e
0 2 * * * find /opt/app/logs -name "*.log.*" -mtime +7 -delete
logging.level.root=WARN
logging.level.com.xxx=INFO
-Ddebug=false
System.out.println-Xloggc:gc.log
-Xlog:gc*:file=/logs/gc.log:time,uptime,level,tags:filecount=5,filesize=100M
# 清空但不删除
: > nohup.out
# 或
truncate -s 0 app.log
⚠️ 不要 rm 正在写的日志
✅ Spring Boot
✅ 老 Java 项目
✅ 容器 / K8s
如果你愿意,可以告诉我:
我可以给你 针对性的配置。