温馨提示×

ubuntu tomcat日志为何慢速

小樊
39
2026-10-15 07:47:54
栏目: 智能运维

在 Ubuntu 上 Tomcat 日志写入变慢(慢速) 通常由以下几类原因导致,按出现频率从高到低说明,并给出排查与解决办法。


一、最常见原因

1️⃣ 使用 System.out.println 或 console 日志

如果应用大量使用:

System.out.println(...)

Tomcat 会把这些输出重定向到:

catalina.out

而 catalina.out 是单线程同步写文件,一旦日志量一大,就会严重拖慢请求。

✅ 解决:

  • 改用 log4j / logback / jul
  • 关闭 System.out 重定向

2️⃣ 日志级别过低(DEBUG / TRACE)

生产环境开了 DEBUG 或 TRACE:

<logger name="com.xxx" level="DEBUG"/>

日志量是 INFO 的 10~100 倍。

✅ 解决:

<root level="INFO">

3️⃣ 磁盘 IO 慢(云服务器常见)

Ubuntu 上 Tomcat 日志通常写在:

/var/log/tomcat9/

如果是:

  • 低配云盘
  • 共享 IO
  • 磁盘写满

就会非常慢。

✅ 排查:

df -h
iostat -x 1
dmesg | grep error

✅ 解决:

  • 换 SSD
  • 日志单独挂盘
  • 清理旧日志

4️⃣ 日志文件过大(catalina.out 几 GB)

catalina.out 不会自动切割(除非你配了 logrotate)。

✅ 解决:

  • 使用 logrotate
  • 禁止直接写 catalina.out

二、Tomcat / JVM 层面原因

5️⃣ Access Log 同步写入

server.xml 中:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       buffered="false"/>

buffered=false 会每条请求立即写磁盘。

✅ 解决:

buffered="true"

6️⃣ 日志框架同步阻塞

log4j / logback 默认:

  • 同步写
  • 不加异步 Appender

✅ 解决(示例 logback):

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE"/>
</appender>

7️⃣ JVM GC 频繁导致“看起来日志慢”

其实是:

  • Full GC 卡住
  • 日志只是表象

✅ 排查:

jstat -gcutil <pid> 1000

三、系统层原因(Ubuntu 特有)

8️⃣ /tmp 或 /var 在 overlay / 网络文件系统

Docker / LXC / WSL 常见。

✅ 解决:

  • 日志目录挂载到本地磁盘
  • 不用 NFS 写日志

9️⃣ 时间同步问题(罕见但真实)

日志写失败重试:

  • NTP 异常
  • 时钟回拨

✅ 检查:

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 + 磁盘慢 + 日志级别低”

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • Tomcat 版本
  • 用的日志框架(log4j / logback / jul)
  • 是 catalina.out 慢还是 localhost_access_log 慢

我可以给你针对性配置。

0 踩