温馨提示×

centos java日志过大如何处理

小樊
41
2026-10-14 21:19:29
栏目: 编程语言

在 CentOS 上 Java 日志过大 是常见问题,通常分为 应用日志(log4j / logback) 和 JVM 日志(gc.log、hs_err 等) 两类。下面按「原因 → 解决方式 → 实战建议」说明。


一、先确认是哪一类日志过大

du -sh /var/log/*
du -sh /opt/app/logs/*

常见大文件:

  • catalina.out(Tomcat)
  • app.log、error.log
  • gc.log
  • hs_err_pid*.log

二、应用日志过大(最常见)

1️⃣ 使用日志滚动(必须做)

✅ logback 示例

<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>

✅ log4j2 示例

<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="logs/app-%d{yyyy-MM-dd}-%i.log">
  <SizeBasedTriggeringPolicy size="100 MB"/>
  <DefaultRolloverStrategy max="10"/>
</RollingFile>

✅ 关键点:

  • 限制 单文件大小
  • 限制 保留天数
  • 限制 总大小

2️⃣ Tomcat 的 catalina.out 特别大

方法一:用 logrotate(推荐)

vim /etc/logrotate.d/tomcat
/opt/tomcat/logs/catalina.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
}

测试:

logrotate -d /etc/logrotate.d/tomcat
logrotate -f /etc/logrotate.d/tomcat

方法二:重定向到滚动日志

修改 catalina.sh:

CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.log"

三、JVM 日志(gc.log)过大

1️⃣ 限制 GC 日志大小

-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=50M
-Xloggc:/opt/app/logs/gc.log

2️⃣ JDK 9+ 推荐方式

-Xlog:gc*:file=/opt/app/logs/gc.log:time,uptime,level:filecount=5,filesize=50M

四、异常崩溃日志(hs_err_pid)

hs_err_pid*.log

✅ 无法自动滚动
✅ 建议:

find / -name "hs_err_pid*.log" -mtime +30 -delete

或写定时任务清理。


五、紧急处理(日志已经很大了)

# 不清空,避免进程写失败
: > app.log

# 或
truncate -s 0 app.log

⚠️ 不要直接 rm,Java 进程仍占用文件。


六、CentOS 系统级建议

1️⃣ journalctl 日志

journalctl --disk-usage
journalctl --vacuum-size=500M

2️⃣ 定时清理脚本

0 2 * * * find /opt/app/logs -name "*.log" -mtime +7 -delete

七、总结最佳实践 ✅

✅ 应用日志:必须配置滚动
✅ Tomcat:用 logrotate
✅ JVM:限制 GC 日志
✅ 不删正在写的文件
✅ 定期清理历史日志


如果你愿意,可以把 日志路径 / Java 版本 / 使用的框架(Spring / Tomcat) 发我,我可以直接给你一套 可复制的配置。

0 踩