在 Ubuntu 上 Tomcat 日志写入变慢(慢速) 通常由以下几类原因导致,按出现频率从高到低说明,并给出排查与解决办法。
System.out.println 或 console 日志如果应用大量使用:
System.out.println(...)
Tomcat 会把这些输出重定向到:
catalina.out
而 catalina.out 是单线程同步写文件,一旦日志量一大,就会严重拖慢请求。
✅ 解决:
log4j / logback / julSystem.out 重定向生产环境开了 DEBUG 或 TRACE:
<logger name="com.xxx" level="DEBUG"/>
日志量是 INFO 的 10~100 倍。
✅ 解决:
<root level="INFO">
Ubuntu 上 Tomcat 日志通常写在:
/var/log/tomcat9/
如果是:
就会非常慢。
✅ 排查:
df -h
iostat -x 1
dmesg | grep error
✅ 解决:
catalina.out 不会自动切割(除非你配了 logrotate)。
✅ 解决:
logrotatecatalina.outserver.xml 中:
<Valve className="org.apache.catalina.valves.AccessLogValve"
buffered="false"/>
buffered=false 会每条请求立即写磁盘。
✅ 解决:
buffered="true"
log4j / logback 默认:
✅ 解决(示例 logback):
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
</appender>
其实是:
✅ 排查:
jstat -gcutil <pid> 1000
/tmp 或 /var 在 overlay / 网络文件系统Docker / LXC / WSL 常见。
✅ 解决:
日志写失败重试:
✅ 检查:
timedatectl
# 日志位置
ls -lh /var/log/tomcat*/
# 磁盘
df -h
iostat -x 1
# Tomcat 进程
ps aux | grep tomcat
# 日志级别
grep -R "DEBUG" /etc/tomcat*/
Tomcat 日志慢,90% 是“写 catalina.out + 磁盘慢 + 日志级别低”
如果你愿意,可以告诉我:
catalina.out 慢还是 localhost_access_log 慢我可以给你针对性配置。