我们将老化的防火墙替换为此服务器,运行 Ubuntu 16.04。
除了运行具有大约 900 条规则(过滤器和 nat 结合)的 iptables 之外,它几乎不做任何事。
它所取代的老化服务器运行良好并且没有出现任何问题。
每隔一段时间(可能是每小时一次或每 30 秒一次),新防火墙与 LAN 上任何其他主机之间的延迟就会从 0.1-0.2 毫秒跃升至 10、40、100 甚至 3000 毫秒,持续几秒钟(有时甚至持续几分钟)。我注意到,与 DMZ 中的主机建立 ssh 连接时存在简单的延迟(不应该有任何延迟),然后使用简单的连续、高速率(-i 0.1)ping 测试对各种主机进行测试。
我在 10gbps 接口和其中一个 1gbps 接口上都测试了这一点。服务器远未达到其网络限制(~10Kpps,上传和下载合计 100-400mbps)。CPU 空闲率为 99%
在一次较长的“中断”中,我从互联网连接到防火墙进行调试,我注意到其他任何接口都没有问题,而且所有接口都正常,没有延迟问题。
为了将交换机从方程式中移除,我将 1gbps 接口移至另一个交换机(在我们的堆栈之外),并在新交换机上添加了另一台服务器进行测试。问题仍然存在,我对多台机器进行持续 ping,它们每隔一段时间都会增加 2-3 秒,包括“即时”交换机中的那台。
dmesg 没有显示任何内容,ifconfig 没有显示任何错误,/proc/interrupts 显示所有核心都参与处理 nic(虽然我很确定对于如此低的吞吐量,即使 1 个核心也足够了......)
对于如何调试这种情况的任何建议或想法都将不胜感激。
谢谢!
编辑:添加 ethtool 输出:
eno1 的设置:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: on (auto)
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
编辑2:也许这无关紧要,但我在一次(非常长的)中断中确实看到了这一点:
%Cpu(s): 0.1 us, 3.3 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
KiB Mem : 16326972 total, 14633008 free, 296636 used, 1397328 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 15540780 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29163 root 20 0 0 0 0 S 8.0 0.0 14:08.45 kworker/4:0
31722 root 20 0 0 0 0 S 7.3 0.0 9:39.76 kworker/6:0
11677 root 20 0 0 0 0 S 5.6 0.0 0:04.65 kworker/3:1
149 root 20 0 0 0 0 S 4.0 0.0 27:21.36 kworker/2:1
46 root 20 0 0 0 0 S 0.3 0.0 0:06.93 ksoftirqd/6
kworker cpu 使用率异常高(通常在 1% 左右)。有什么想法吗?
答案1
我遇到过类似的情况,关联帮助我们解决问题!
本质上,您可能需要将 TCP 套接字接收最大缓冲区大小配置为 2-4mb 之间,如果它不会影响您的服务,则可能甚至更小,因为您有如此多的大幅峰值。
比较以下问题:
- 大量健康流量看似随机,但出现大量延迟峰值,并且可能会持续很长一段时间。
- 您已确认问题出在您的新防火墙上。
- 所有测试数据都表明没有问题。
- 这是操作系统接收和处理数据包之间的非常偶然、看似随机的延迟。
希望这对你有帮助!