在 CentOS 上 Java 日志突然变慢,通常不是 JVM 本身的问题,而是日志输出链路或系统环境发生了变化。下面按最常见原因 → 排查方法 → 解决建议来说明。
Java 日志最终都会落到文件系统:
排查:
iostat -x 1
top
df -h
解决:
如果使用的是:
System.out.println在高并发下会严重拖慢应用。
典型表现:
解决: ✅ 使用异步日志
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
</appender>
<AsyncLogger>
日志中如果包含:
InetAddress.getHostName()CentOS 默认可能尝试 DNS 解析,DNS 不通就卡几秒
典型现象:
排查:
getent hosts <ip>
nslookup <ip>
解决:
/etc/hosts 加映射-Djava.net.preferIPv4Stack=true
如果:
某些日志框架会反复计算时间,导致变慢。
排查:
date
timedatectl
解决:
INFO 或 WARNtoString() 大对象如果 Java 日志输出到:
可能被 journald 拖慢。
排查:
journalctl -f
systemctl status
解决:
SELinux 开启时,写某些目录会被拦截或审计。
排查:
getenforce
ausearch -m avc -ts recent
解决:
setenforce 0
# 1. 磁盘
iostat -x 1
# 2. 进程
top -Hp <pid>
# 3. 线程栈(看卡在哪)
jstack <pid> | grep -A 20 "logging"
# 4. DNS
getent hosts $(hostname -i)
# 5. 日志配置
看是否 AsyncAppender
CentOS 上 Java 日志变慢,90% 是“同步写盘 + 磁盘 IO / DNS 解析”问题。
如果你愿意,可以把:
发出来,我可以直接帮你定位到具体配置问题。