在 Debian 上运行 Tomcat 时,日志写入“慢”通常不是 Tomcat 本身的问题,而是日志方式、系统配置或资源瓶颈导致的。下面按常见原因从高到低给你梳理一下,并给出对应排查/解决办法。
System.out.println 或 console 日志Tomcat 默认会把 catalina.out 输出到文件,如果应用里大量使用:
System.out.println(...)
或 logging 直接打到 console,会非常慢,尤其是:
✅ 解决:
很多默认配置是同步写日志:
<Appender name="FILE" ...>
每次写日志都直接落盘,IO 阻塞线程。
✅ 解决(以 log4j2 为例):
<AsyncRoot level="info">
<AppenderRef ref="FILE"/>
</AsyncRoot>
或使用:
logback 的 AsyncAppenderBufferedIO=true常见于:
排查:
iostat -x 1
看 %util 是否接近 100%
✅ 解决:
catalina.out 太大或未轮转如果 catalina.out 几个 GB:
✅ 解决:
logrotatecatalina.outcatalina.out示例 logrotate:
/opt/tomcat/logs/catalina.out {
daily
rotate 7
copytruncate
compress
}
Tomcat 或日志框架在记录:
如果 DNS 不通或慢,会卡住。
✅ 解决:
server.xml 中:<Valve className="org.apache.catalina.valves.AccessLogValve"
resolveHosts="false" />
/etc/hosts 配置本机名GC 频繁时:
排查:
jstat -gcutil <pid> 1000
✅ 解决:
journald + Tomcat 混用如果你用 systemd 启动 Tomcat,又写文件日志,可能双重缓冲。
✅ 建议:
journalctlSystem.out?iostat 看磁盘是否 100%catalina.out 多大?resolveHosts 是否 false?你可以贴一下:
catalina.out 慢,还是应用日志慢我可以直接帮你看配置、给最优方案。