温馨提示×

为什么debian tomcat日志满

小樊
43
2026-10-01 09:19:16
栏目: 智能运维

Debian 上 Tomcat 日志“满”(磁盘被占满或日志文件异常大)通常并不是 Debian 本身的问题,而是 Tomcat 日志机制 + 配置 + 应用行为 共同导致的。下面按常见原因从“最常见 → 较少见”说明。


一、最常见原因

1. 应用日志级别太低(DEBUG / INFO 刷屏)

很多 Java 应用默认使用:

  • log4j
  • logback
  • java.util.logging

如果级别设为 DEBUG 或 INFO,且请求量大:

DEBUG xxx
DEBUG yyy
DEBUG zzz

➡ 日志迅速膨胀

典型现象

  • catalina.out 非常大
  • 单个文件几 GB

✅ 解决:

<root level="WARN">

或

logging.level.root=WARN

2. catalina.out 没有轮转(最容易踩坑)

在 Debian 上:

  • catalina.out 默认不会被 Tomcat 自动切割
  • 它只是一个 stdout/stderr 重定向文件

如果你的应用:

  • 打印异常堆栈
  • e.printStackTrace()
  • 大量 System.out.println

➡ 文件无限增长

✅ 解决方式(任选):

  • 用 logrotate
  • 或改为只写日志框架,不写 stdout

3. 没有配置日志轮转(logrotate / logging.properties)

Tomcat 自带:

  • catalina.log
  • localhost.log
  • host-manager.log

但 默认不一定自动清理

✅ 检查:

ls -lh /var/log/tomcat9/

✅ 常见修复:

apt install logrotate

二、Tomcat 自身配置问题

4. Access Log(访问日志)未限制

server.xml 中:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b" />

如果:

  • 高并发
  • 不轮转

➡ 每日几个 GB

✅ 可限制:

rotatable="true"

5. 日志文件未压缩

长期运行后:

  • .log
  • .txt

堆积几十个

✅ logrotate 示例:

/var/log/tomcat9/*.log {
    daily
    missingok
    rotate 7
    compress
    copytruncate
}

三、应用层问题(非常常见)

6. 异常被反复捕获并打印

例如:

try {
   ...
} catch (Exception e) {
   e.printStackTrace();
}

或在循环中:

while (true) {
    log.error("fail");
}

➡ 日志爆炸


7. 第三方库日志失控

如:

  • Hibernate SQL 日志
  • Spring Security
  • HTTP client

✅ 建议:

logging.level.org.hibernate=WARN
logging.level.org.springframework.security=WARN

四、系统层面原因(较少但存在)

8. Debian 磁盘分区太小

比如:

  • /var 单独分区
  • 只有 5–10GB

✅ 检查:

df -h

9. Tomcat 以错误用户运行

有时:

  • 日志权限错误
  • Tomcat 不断重试写日志失败并刷错误

五、快速自查清单(推荐)

# 1. 看哪个文件大
du -sh /var/log/tomcat9/*

# 2. 看磁盘
df -h

# 3. 看 tomcat 配置
cat /etc/tomcat9/logging.properties

# 4. 看 server.xml
grep Valve /etc/tomcat9/server.xml

六、总结一句话

Debian 上 Tomcat 日志满,90% 是因为:应用日志太多 + catalina.out 不轮转 + 没有 logrotate

如果你愿意,可以贴:

  • Tomcat 版本
  • /var/log/tomcat9 目录内容
  • logging.properties

我可以帮你精确指出是哪一个在“吃磁盘”。

0 踩