这个问题常见但原因多样,我按最常见 → 较少见的顺序给你梳理。你可以对照排查。
Tomcat 默认会持续往这些文件写日志:
catalina.out
localhost.log
host-manager.log
manager.log
...
但 Tomcat 本身不会自动删除或切割日志,尤其在 Ubuntu 上,如果没配置 logrotate,catalina.out 会无限增长。
✅ 解决方案:配置 logrotate
Ubuntu 上通常已有 /etc/logrotate.d/tomcat9(或 tomcat8 / tomcat10)
示例(推荐):
/var/log/tomcat9/catalina.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
然后测试:
sudo logrotate -d /etc/logrotate.d/tomcat9
很多情况是:
DEBUG / INFO 级别全开catalina.out/var/log/tomcat*/ 下的自定义文件检查:
du -sh /var/log/tomcat*
常见问题:
✅ 解决建议
catalina.outUbuntu 用 systemd 启动 Tomcat 时:
StandardOutput=append:/var/log/tomcat9/catalina.out
这会导致:
logrotate 的 copytruncate 失效✅ 解决方式
编辑 systemd 配置:
sudo systemctl edit tomcat9
改为:
[Service]
StandardOutput=journal
StandardError=journal
然后:
sudo systemctl daemon-reload
sudo systemctl restart tomcat9
这是经典坑:
rm catalina.out
但磁盘没释放!
检查:
sudo lsof +L1
✅ 解决方式
truncate 而不是 rm:: > /var/log/tomcat9/catalina.out
Tomcat 会写:
/tmp
/tmp/hsperfdata_*
检查:
df -h
du -sh /tmp
比如:
catch (Exception e) {
log.error("error", e);
}
但异常不断被触发。
✅ 建议:
# 1. 看哪个目录最占空间
du -sh /var/log/tomcat*
# 2. 看磁盘
df -h
# 3. 看是否有已删除但未释放的文件
sudo lsof +L1
# 4. 看日志配置
ls /etc/logrotate.d/tomcat*
你可以贴出:
df -h 输出du -sh /var/log/tomcat* 输出我可以给你一套完全适合你环境的清理 + 防满方案。