温馨提示×

centos java日志为啥满

小樊
48
2026-09-24 08:35:20
栏目: 编程语言

在 CentOS 上 Java 日志“满”(磁盘被日志占满 / 日志文件异常大)是非常常见的问题,通常不是系统本身的问题,而是应用日志配置或使用方式导致的。下面按最常见原因 → 排查方法 → 解决办法给你梳理一下。


一、Java 日志为什么会“满”

1️⃣ 日志没有滚动(最最常见)

比如:

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

2️⃣ 日志级别太低(DEBUG / TRACE)

生产环境还在用:

<root level="DEBUG">

后果:

  • 请求量一大,日志爆炸
  • SQL、参数全打

✅ 建议:

<root level="INFO">

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

比如:

  • 定时任务异常
  • MQ 消费失败一直重试
  • HTTP 调用异常未限流

结果:

ERROR xxx
ERROR xxx
ERROR xxx
(每秒几百行)

✅ 解决:

  • 异常日志加频率控制
  • 失败任务限流 / 熔断

4️⃣ 标准输出(stdout)没重定向

Java 启动方式:

java -jar app.jar

日志直接进:

/systemd journal
或
nohup.out

CentOS 常见爆点:

  • /var/log/messages
  • journalctl 爆
  • 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

5️⃣ 多个 Java 进程写同一个日志

比如:

  • 多实例部署
  • 容器 + 宿主机日志冲突

结果:

  • 日志乱写
  • 文件锁不住
  • 越写越大

6️⃣ Tomcat / 中间件日志

常见“元凶”:

  • catalina.out
  • localhost_access_log
  • hs_err_pid*(JVM 崩溃)

✅ 注意:

find / -name "hs_err_pid*" 2>/dev/null

二、快速排查(CentOS 命令)

1️⃣ 看哪个目录最大

du -sh /* 2>/dev/null
du -sh /var/log/* 2>/dev/null

2️⃣ 看大文件

find / -type f -size +100M 2>/dev/null

3️⃣ 看 Java 进程日志位置

ps -ef | grep java
lsof -p <pid> | grep log

4️⃣ 看磁盘占用

df -h

三、临时救急方案

# 不清进程清空日志
: > /var/log/app/app.log

# 或
truncate -s 0 app.log

⚠️ 不要直接 rm,否则 Java 还占用 inode


四、推荐生产标准配置

✅ 日志框架:

  • logback / log4j2(别用 System.out)

✅ 必配:

  • 按天滚动
  • 最大保留 7~15 天
  • INFO 级别
  • 单文件大小限制(100~500MB)

✅ 目录:

/var/log/app/

五、如果你愿意,我可以帮你具体问题定位

你可以贴:

  1. Java 启动方式(systemd / nohup / docker)
  2. 用的日志框架(log4j / logback)
  3. 哪个目录或文件满
  4. df -h + du -sh /var/log

我可以直接帮你改配置文件,或者告诉你哪一行在疯狂打日志。

0 踩