如何设置Ubuntu Tomcat日志保留策略以延长服务器稳定运行时间?

更新于
2026-09-28 23:58:17
2阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

痛点直击这方面,为什么你的Ubuntu Tomcat服务器总在半夜“猝死”?

你是否经历过以下噩梦场景?

如何设置Ubuntu Tomcat日志保留策略以延长服务器稳定运行时间?
  • 硬盘空间报警轰炸手机: 凌晨3点。catalina.out 悄无声息地膨胀到几十 GB,撑爆根分区,导致数据库连接池崩溃、JVM OOM、服务彻底不可用。
  • 排查故障却发现日志“断层”: 生产环境出 Bug。急需定位堆栈,翻开日志发现关键错误早已被无限滚动的 DEBUG 流水冲刷殆尽,或者轮转策略配错导致历史日志丢失。按理说,
  • 访问日志成“僵尸文件”: localhost_access_log 按天生成从未清理,数万个小文件拖垮 inode。ls/find/rm/-rf /var/log/tomcat/*
  • 性能抖动无法解释: GC 频繁、线程池饱和,却因日志级别设为 FINE/FINER,同步写磁盘 IO 飙升拖垮吞吐量。怎么说呢,

主要误区: "Tomcat 自带日志轮转就够用了" —— 错! catalina.out 是标准输出重定向,Java 原生 JULI 不支持 对其按大小/时间切割;仅靠 logging.properties 的 maxDays 只能管 *.log 文件。必须引入程序级 logrotate

主要策略这方面。 双轨并行,分层治理

#!/bin/bashLOGPATH="/opt/tomcalogs" BACKUPDIR="/backup/tomatlogs$" RETENTIONDAYS=9REMOTESERVER="backup@storage:/mnt/logs/tomat" mkdir-p"$BACKUPDIR" find"$LOGPATH"-name".log"-mtime+1-execgzip{}\;find"$LOG_PATH"-name".gz"-mtime+1-execmv{}"$BACKUPDIR"\;rsync-avz--remove-source-files"$BACKUPDIR"/"$REMOTESERVER"/find"$BACKUPDIR"-type f-mtime+"$RETENTIONDAYS"-deleteecho" Backup done.">> /var/log/tomatbackup.log

chmod+x/opt/scripts/backuptomatlog.sh

*/etc/cron.daily/logrotate

tail-f/opt/scripts/backup_tomat_log.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh...> /dev/null < 'EOF'

sudoapt-getinstall-y promeus-node-exporterpromtailgrafana cat>/etc/promtail/config.yml<'EOF' clients:-url:"http://loki/loki/api/v1/push" positions: filename:/tmp/positions.ymlscrapeconfigs:-jobname:"tomat" static_configs:-targets:-labels:"job":"tomat","env":"prod"。"host":"{{ hostname }}" path:/opt/tomatlogs/*.logEOFsudo systemctlenable--now promtail sudocat>/etc/promeus/rules.tomats.yml<'EOF' groups:-name:"tomat-log-alerts" rules:-alert:"TomatErrorSpike" expr:'rate FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>" 再看labels,{severity:"critical"}annotations:{summary:"Tomat ERROR激增","description":"实例 {{ instance }}近{{ $value }}次/秒报错"}EOFsudo systemctlreload promeus>>>>>>>>>>>>

交付检查清单 ✅ 上线前必做自测项序号检查项预期结果验证命令检查 logging.propertiesmaxDays各组件按业务关键性分级设置gremaxDays/path/to/configlogging.properties检查 server.xmlAccessLogValverotatabletruemaxDays≥grep-A8AccessLogValve/path/to/server.xml部署 logrote 配置含 copytruncate、size、rotate、compresssudologrotatedebug/etc/logrote.d/test.sh模拟 catalina.out 写满触发切割dd if=/devzero of=/opt/test.log bs=M count=&&sudologrotatedebug/etc/logrote.d/test.sh确认旧.gz归档存在且可读zcat最新归档.gzhead-n确认 cron 日常执行正常greplogrote/var/log/syslogtail-/var/log/syslog磁盘告警阈值已接入监控PromeusGrafana告警规则已生效curl-shttp://localhost/metricsgrepdisk_usage备份脚本可恢复模演练通过解压归档→导入ELK→搜索关键字成功命中>>...>>...>>...>>...>>

💡 一句话与避坑教程 : 内部 JULI管 *.log,外部 logrote管 catalina.out,访问 日靠 Valve maxDays 自治。其实,三板斧齐下才能守住磁盘不爆、故障有据、运维不累。说到避坑教程, l i 不要 在 logging.properties给 catalina.out设 maxDays — — 不 生效!必须靠 logrote,li> l i copytruncate 必加,否则 Tomcat 持有旧句柄继续写导致新文件空白、旧文件不释放空间。li> l i size 阈值建议 ≤ 分区剩余空间的 %,防止单次切割间隔内撑爆。li> l i 生产环境严禁 ConsoleHandler 输出到文件或级别低于 WARNING,同步 IO 是性能杀手。li> l i 日志目录单独挂载独立分区/LVM卷,即使爆满也不影响根分区程序服务。li> 定期演练“从归档恢复到 ELK 查询”,备份没验证等于没备份。话说回来,li /> ul /> div />

如何设置Ubuntu Tomcat日志保留策略以延长服务器稳定运行时间?


: 本方案基于 Ubuntu + Tomcat ≥ ± ± ± ± ± ± ± ± ± ± ± ± ± ±...

标签:Ubuntu

痛点直击这方面,为什么你的Ubuntu Tomcat服务器总在半夜“猝死”?

你是否经历过以下噩梦场景?

如何设置Ubuntu Tomcat日志保留策略以延长服务器稳定运行时间?
  • 硬盘空间报警轰炸手机: 凌晨3点。catalina.out 悄无声息地膨胀到几十 GB,撑爆根分区,导致数据库连接池崩溃、JVM OOM、服务彻底不可用。
  • 排查故障却发现日志“断层”: 生产环境出 Bug。急需定位堆栈,翻开日志发现关键错误早已被无限滚动的 DEBUG 流水冲刷殆尽,或者轮转策略配错导致历史日志丢失。按理说,
  • 访问日志成“僵尸文件”: localhost_access_log 按天生成从未清理,数万个小文件拖垮 inode。ls/find/rm/-rf /var/log/tomcat/*
  • 性能抖动无法解释: GC 频繁、线程池饱和,却因日志级别设为 FINE/FINER,同步写磁盘 IO 飙升拖垮吞吐量。怎么说呢,

主要误区: "Tomcat 自带日志轮转就够用了" —— 错! catalina.out 是标准输出重定向,Java 原生 JULI 不支持 对其按大小/时间切割;仅靠 logging.properties 的 maxDays 只能管 *.log 文件。必须引入程序级 logrotate

主要策略这方面。 双轨并行,分层治理

#!/bin/bashLOGPATH="/opt/tomcalogs" BACKUPDIR="/backup/tomatlogs$" RETENTIONDAYS=9REMOTESERVER="backup@storage:/mnt/logs/tomat" mkdir-p"$BACKUPDIR" find"$LOGPATH"-name".log"-mtime+1-execgzip{}\;find"$LOG_PATH"-name".gz"-mtime+1-execmv{}"$BACKUPDIR"\;rsync-avz--remove-source-files"$BACKUPDIR"/"$REMOTESERVER"/find"$BACKUPDIR"-type f-mtime+"$RETENTIONDAYS"-deleteecho" Backup done.">> /var/log/tomatbackup.log

chmod+x/opt/scripts/backuptomatlog.sh

*/etc/cron.daily/logrotate

tail-f/opt/scripts/backup_tomat_log.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh.sh...> /dev/null < 'EOF'

sudoapt-getinstall-y promeus-node-exporterpromtailgrafana cat>/etc/promtail/config.yml<'EOF' clients:-url:"http://loki/loki/api/v1/push" positions: filename:/tmp/positions.ymlscrapeconfigs:-jobname:"tomat" static_configs:-targets:-labels:"job":"tomat","env":"prod"。"host":"{{ hostname }}" path:/opt/tomatlogs/*.logEOFsudo systemctlenable--now promtail sudocat>/etc/promeus/rules.tomats.yml<'EOF' groups:-name:"tomat-log-alerts" rules:-alert:"TomatErrorSpike" expr:'rate FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>"FOR>[>" 再看labels,{severity:"critical"}annotations:{summary:"Tomat ERROR激增","description":"实例 {{ instance }}近{{ $value }}次/秒报错"}EOFsudo systemctlreload promeus>>>>>>>>>>>>

交付检查清单 ✅ 上线前必做自测项序号检查项预期结果验证命令检查 logging.propertiesmaxDays各组件按业务关键性分级设置gremaxDays/path/to/configlogging.properties检查 server.xmlAccessLogValverotatabletruemaxDays≥grep-A8AccessLogValve/path/to/server.xml部署 logrote 配置含 copytruncate、size、rotate、compresssudologrotatedebug/etc/logrote.d/test.sh模拟 catalina.out 写满触发切割dd if=/devzero of=/opt/test.log bs=M count=&&sudologrotatedebug/etc/logrote.d/test.sh确认旧.gz归档存在且可读zcat最新归档.gzhead-n确认 cron 日常执行正常greplogrote/var/log/syslogtail-/var/log/syslog磁盘告警阈值已接入监控PromeusGrafana告警规则已生效curl-shttp://localhost/metricsgrepdisk_usage备份脚本可恢复模演练通过解压归档→导入ELK→搜索关键字成功命中>>...>>...>>...>>...>>

💡 一句话与避坑教程 : 内部 JULI管 *.log,外部 logrote管 catalina.out,访问 日靠 Valve maxDays 自治。其实,三板斧齐下才能守住磁盘不爆、故障有据、运维不累。说到避坑教程, l i 不要 在 logging.properties给 catalina.out设 maxDays — — 不 生效!必须靠 logrote,li> l i copytruncate 必加,否则 Tomcat 持有旧句柄继续写导致新文件空白、旧文件不释放空间。li> l i size 阈值建议 ≤ 分区剩余空间的 %,防止单次切割间隔内撑爆。li> l i 生产环境严禁 ConsoleHandler 输出到文件或级别低于 WARNING,同步 IO 是性能杀手。li> l i 日志目录单独挂载独立分区/LVM卷,即使爆满也不影响根分区程序服务。li> 定期演练“从归档恢复到 ELK 查询”,备份没验证等于没备份。话说回来,li /> ul /> div />

如何设置Ubuntu Tomcat日志保留策略以延长服务器稳定运行时间?


: 本方案基于 Ubuntu + Tomcat ≥ ± ± ± ± ± ± ± ± ± ± ± ± ± ±...

标签:Ubuntu