在 CentOS 上 Java 日志“满”(磁盘被日志占满 / 日志文件异常大)是非常常见的问题,通常不是系统本身的问题,而是应用日志配置或使用方式导致的。下面按最常见原因 → 排查方法 → 解决办法给你梳理一下。
比如:
log4j / logback 只写文件,不切分FileAppender 但没配 RollingFileAppender结果:
app.log → 一直增长,几天就几十 GB
✅ 正确示例(logback):
<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>
</appender>
生产环境还在用:
<root level="DEBUG">
后果:
✅ 建议:
<root level="INFO">
比如:
结果:
ERROR xxx
ERROR xxx
ERROR xxx
(每秒几百行)
✅ 解决:
Java 启动方式:
java -jar app.jar
日志直接进:
/systemd journal
或
nohup.out
CentOS 常见爆点:
/var/log/messagesjournalctl 爆nohup.out 几十 GB✅ 正确方式:
java -jar app.jar > /var/log/app/app.out 2>&1
或 systemd:
StandardOutput=append:/var/log/app/app.out
StandardError=append:/var/log/app/app.err
比如:
结果:
常见“元凶”:
catalina.outlocalhost_access_loghs_err_pid*(JVM 崩溃)✅ 注意:
find / -name "hs_err_pid*" 2>/dev/null
du -sh /* 2>/dev/null
du -sh /var/log/* 2>/dev/null
find / -type f -size +100M 2>/dev/null
ps -ef | grep java
lsof -p <pid> | grep log
df -h
# 不清进程清空日志
: > /var/log/app/app.log
# 或
truncate -s 0 app.log
⚠️ 不要直接 rm,否则 Java 还占用 inode
✅ 日志框架:
✅ 必配:
✅ 目录:
/var/log/app/
你可以贴:
df -h + du -sh /var/log我可以直接帮你改配置文件,或者告诉你哪一行在疯狂打日志。