Linux 的 syslog 变慢通常由以下几个常见原因造成,按“发生频率”从高到低说明:
syslog 默认会把日志写入磁盘(如 /var/log/messages、/var/log/syslog)。
常见情况:
表现:
top 中 wa 高iostat 看到磁盘 util 接近 100%D(不可中断睡眠)解决:
# 查看 IO
iostat -x 1
iotop
# 日志轮转检查
logrotate -d /etc/logrotate.conf
不合理的配置会导致每条日志都做大量处理。
典型问题:
omfile + mmnormalize)$ActionFileEnableSync on)解决:
rsyslog 默认是队列模型,如果下游慢,会阻塞上游。
典型场景:
解决(推荐):
$ActionQueueType LinkedList
$ActionQueueFileName syslogqueue
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
时间回拨或跳跃会导致:
解决:
timedatectl status
chronyc tracking
常见于:
排查:
journalctl -u <service> --since "10 min ago" | wc -l
systemd 环境下:
journald 先收日志rsyslog 再从 socket 读如果 journal 压力过大,也会拖慢 syslog。
可优化:
/etc/systemd/journald.conf
Storage=volatile
RateLimitInterval=5s
RateLimitBurst=1000
高并发日志时:
ulimit -n
cat /proc/sys/fs/file-max
top # 看 wa / syslog 状态
iostat -x 1
journalctl -f
ls -lh /var/log
systemctl status rsyslog
如果你能补充:
我可以给你更精准的优化方案。