温馨提示×

debian syslog为何慢

小樊
48
2026-09-08 15:57:32
栏目: 智能运维

在 Debian 上 syslog 变慢(写入延迟、日志卡顿、系统响应变慢) 通常有下面几类原因。我按「最常见 → 较少见」给你梳理,并给出排查方法。


一、最常见原因

1. rsyslog 阻塞(最常见)

Debian 默认使用 rsyslog

典型表现

  • 日志写入延迟几秒甚至几十秒
  • dmesg 正常,但 /var/log/syslog 很慢
  • 系统偶尔卡顿

常见原因

  • 日志写到 远程 syslog 服务器,网络慢或断
  • 写到 慢设备(NFS、USB、加密盘)
  • 某个 action 配置为同步写入(/var/log 在 HDD 上)

排查

systemctl status rsyslog
journalctl -u rsyslog

看配置

grep -R "action" /etc/rsyslog.conf /etc/rsyslog.d/

解决

  • 远程日志加队列:
$ActionQueueType LinkedList
$ActionQueueFileName rsyslog_queue
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
  • 避免直接写 NFS / 网络盘

2. 磁盘 I/O 瓶颈

syslog 是 顺序写磁盘,一旦磁盘慢就会拖慢整个系统。

检查

iostat -x 1
iotop

常见情况

  • HDD + 高日志量
  • 日志没轮转,单文件巨大
  • /var 在慢分区

3. 日志量爆炸(程序狂打日志)

某个服务疯狂写日志。

查谁在写

lsof | grep /var/log
journalctl -p err -b

解决

  • 限制日志级别
  • 修改服务配置(如 cron、systemd 单元)

二、systemd-journald 与 rsyslog 冲突

Debian 中:

  • systemd-journald 收集日志
  • rsyslog 再从 journal 拉取

如果 journal 很大或磁盘慢:

  • rsyslog 拉取慢
  • journalctl 也卡

检查

journalctl --disk-usage

限制 journal 大小

/etc/systemd/journald.conf
SystemMaxUse=500M

三、SELinux / AppArmor(较少,但可能)

AppArmor 阻止 rsyslog 写文件,导致重试。

dmesg | grep apparmor
aa-status

四、时间问题(NTP / 时钟跳变)

如果系统时间突然回跳:

  • rsyslog 会“等待”
  • 日志顺序异常、看起来慢
timedatectl

五、老旧 Debian + 单线程 rsyslog

在:

  • Debian 9/10
  • 高并发日志
  • 无队列配置

rsyslog 是单线程,容易堵。

✅ 升级或加队列基本能解决。


快速定位 checklist(建议你照做)

# 1. 看 rsyslog 状态
systemctl status rsyslog

# 2. 看错误
journalctl -u rsyslog -p err

# 3. 看磁盘
iostat -x 1

# 4. 看 journal 大小
journalctl --disk-usage

# 5. 看配置是否有远程/同步写
grep -R "@" /etc/rsyslog.conf /etc/rsyslog.d/

如果你愿意,可以贴一下:

  • Debian 版本
  • 是否远程 syslog
  • rsyslog.conf
  • iostat 输出

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

0