跳转至

记某次某安全厂商应用运行一段时间后,Linux 出现 ping 延迟高问题的解决思路

1. 问题描述

在某台联想信创服务器(海光 CPU 版本)上安装银河麒麟 V10SP1 后,安装了某个安全厂商的软件。该安全厂商软件需要部分 root 的权限运行,观察到的现象为:软件运行一段时间后,这个节点到别的节点 ping 延迟变得特别高而且不稳定(同一个交换机下的两台机器之间互相 ping,有 100ms 延迟)。且观察到 CPU 软中断非常高且分布不均匀。

2. 解决思路及最终结论

该问题的排查思路如下:

  • 在确认了无应用和业务影响、将应用服务器隔离后,停止应用,继续测试,发现 ping 延迟依旧高,至此排除不是应用运行导致的问题。
  • 关闭这台物理机上安装的安全防护软件 G01,并卸载 G01 软件的内核模块,问题依旧存在,说明不是 G01 导致的问题。
  • 重启 dbus 服务和 systemd 服务:
systemctl restart dbus.service
systemctl systemctl daemon-reexec

问题依旧存在,排除 dbus和 `systemd 的问题。

  • 该物理机使用双网卡绑定,依次重启两个网卡及其 bond,重启 NetworkManager ,问题没有解决。且尝试 ping 127.0.0.1 ,发现 127.0.0.1 的延迟也有 10ms 且不稳定,排除是网络问题导致。
  • 最终发现是 iptables 里有 9 万行重复项导致:
# iptables -n -L -v | wc -l
91257

直接问题是因为每次包进入到服务器,都要匹配这 9 万行 iptables 规则,然后才会把包放进来。

3. 解决方法

临时的解决方法为清空 iptables :

iptables -F

清空后, ping 127.0.0.1 验证问题已解决。

根本的解决方法需要安全软件厂商分析为什么软件会往 iptables 里添加 9 万行重复的 iptables 规则。