温馨提示×

centos message为何写入慢

小樊
42
2026-09-15 05:41:01
栏目: 智能运维

在 CentOS(以及大多数 Linux 发行版)上,/var/log/messages(或 systemd 下的 journal + rsyslog)写入慢通常不是单点原因,而是多个环节叠加。下面按常见原因 → 排查方法 → 解决建议梳理。


一、最常见原因

1. rsyslog 同步写盘(最典型)

rsyslog 默认使用:

/var/log/messages  -> 文件系统 -> 磁盘

如果:

  • 使用 sync()
  • 磁盘 IO 繁忙
  • 机械盘 / 云盘性能差

就会明显变慢。

检查:

grep messages /etc/rsyslog.conf

常见慢配置:

*.*    /var/log/messages

(没有缓冲)


2. 日志量过大(突发或持续)

  • 程序疯狂打日志
  • 内核频繁报错
  • 网络/磁盘错误循环

查看日志速率:

wc -l /var/log/messages
tail -f /var/log/messages

3. 磁盘 IO 瓶颈

CentOS 上常见于:

  • 云服务器(低 IOPS)
  • 机械硬盘
  • 磁盘写满或 inode 满

检查:

iostat -x 1
df -h
df -i

4. systemd-journald + rsyslog 双重写入

CentOS 7+:

  • journal 写 /run/log/journal
  • rsyslog 再从 journal 读并写文件

配置不当会“堵”

检查:

systemctl status systemd-journald
systemctl status rsyslog

5. rsyslog 配置阻塞(远程日志)

如果你配置了:

*.*  @logserver:514

但:

  • 网络慢
  • 日志服务器不可达

rsyslog 会卡住本地写


6. SELinux / audit 干扰

  • SELinux 拒绝
  • auditd 高频写

检查:

ausearch -m AVC
getenforce

二、快速排查顺序(推荐)

# 1. 看磁盘
iostat -x 1
df -h
df -i

# 2. 看日志速率
tail -f /var/log/messages

# 3. 看 rsyslog 状态
systemctl status rsyslog

# 4. 看是否卡网络
rsyslogd -N1

三、常见优化方案

✅ 1. 开启 rsyslog 缓冲(强烈推荐)

$ModLoad imuxsock
$ModLoad imjournal

# 写文件使用异步
$ActionFileEnableSync off
$ActionQueueType LinkedList
$ActionQueueFileName fwdRule1
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on

✅ 2. 限制日志级别

不要全量写:

*.info;mail.none;authpriv.none;cron.none    /var/log/messages

✅ 3. 使用 logrotate 防膨胀

/etc/logrotate.d/syslog

✅ 4. 磁盘层面

  • 使用 SSD
  • 云盘提高 IOPS
  • /var/log 单独挂载

✅ 5. 减少 journal 压力

/etc/systemd/journald.conf
Storage=persistent
RateLimitInterval=30s
RateLimitBurst=1000

四、一句话总结

CentOS message 写入慢,90% 是 rsyslog 同步写 + 磁盘 IO 差 + 日志量过大 三件事叠加。

如果你愿意,可以贴:

  • CentOS 版本
  • rsyslog.conf
  • iostat / df 输出

我可以直接帮你精准定位是哪一层慢

0