温馨提示×

ubuntu tomcat日志为何慢

小樊
37
2026-09-27 18:27:24
栏目: 智能运维

在 Ubuntu 上 Tomcat 日志写入变慢 是一个比较常见的问题,通常不是 Tomcat 本身慢,而是日志机制、系统环境或配置导致的。下面按常见原因 → 排查方法 → 解决建议来说明。


一、最常见原因

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

如果应用里大量使用:

System.out.println(...)

或 logging.console 开启,Tomcat 会把日志输出到:

  • catalina.out
  • 标准输出(stdout)

问题:

  • catalina.out 是单线程顺序写
  • 日志量大时严重阻塞

✅ 解决

  • 禁用 System.out
  • 使用 log4j2 / logback
  • 不把应用日志写到 catalina.out

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

<Root level="debug">

或

logging.level.root=DEBUG

结果:

  • 每秒几万行日志
  • 磁盘 I/O 被打满

✅ 解决

  • 生产环境使用 INFO 或 WARN
logging.level.root=INFO

3️⃣ 磁盘 I/O 性能问题(非常常见)

Ubuntu 上 Tomcat 日志慢,80% 是磁盘问题

检查:

iostat -x 1

或

iotop

常见问题:

  • 云服务器用 普通云盘
  • 日志目录在 /var/log
  • 磁盘写满或接近满

✅ 解决

df -h
  • 日志单独挂载高性能磁盘(SSD)
  • 清理旧日志
  • 限制日志大小(见下)

4️⃣ 日志文件过大(无轮转)

catalina.out 常见几个 GB

问题:

  • 文件越大写入越慢
  • grep / tail 也慢

✅ 解决 使用 logrotate:

/etc/logrotate.d/tomcat

示例:

/opt/tomcat/logs/catalina.out {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

5️⃣ 使用了同步日志(log4j / logback 默认)

同步日志会阻塞业务线程

✅ 解决 使用异步日志:

log4j2:

<AsyncRoot level="info">

logback:

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">

6️⃣ Ubuntu + journald / rsyslog 干扰

如果你把 Tomcat 作为 systemd 服务:

journalctl -u tomcat

问题:

  • stdout → journald → 磁盘
  • 双重写

✅ 解决

[Service]
StandardOutput=append:/opt/tomcat/logs/catalina.out
StandardError=append:/opt/tomcat/logs/catalina.out

7️⃣ 时间同步 / DNS 反向解析

Tomcat 访问日志:

%h

会做 DNS 反向解析

✅ 解决

%a

或

enableLookups="false"

二、快速自查清单(推荐)

# 磁盘
df -h
iostat -x 1

# 日志大小
du -sh /opt/tomcat/logs/*

# Tomcat 进程
ps -ef | grep tomcat

# 日志级别
grep -R "DEBUG" /opt/tomcat/conf

三、典型“最佳配置”

✅ 生产环境推荐:

  • 日志级别:INFO
  • 异步日志
  • 日志轮转
  • SSD 磁盘
  • 不写 catalina.out
  • 禁用 DNS 解析

如果你愿意,可以贴出:

  • Tomcat 版本
  • Ubuntu 版本
  • 使用的日志框架(log4j / logback)
  • server.xml 或 log4j2.xml

我可以直接帮你精准定位是哪一条导致的慢。

0 踩