H3C-S5800交换机频繁出现CPU利用率高的解决方法
H3C S5800交换机频繁出现CPU利用率高的解决方法
一客户反馈S5800设备使用过程中,CPU利用率突然上升到100%,之后客户业务马上受到影响,登录设备查看进程发现arp占79%,但过了几分钟后CPU又回到原来水平了。该故障情况不定时出现,每次出现持续一段时间。
原因分析
1、根据诊断信息,可以确定占用CPU最多的进程是ARP任务。现场通过抓包确认,CPU高时,设备收到较多ARP报文。
2、查看设备配置,发现配置了arp detection功能。在配置了ARP Detection功能后,设备会将收到的ARP报文重定向到CPU进行检查,这样可能会导致当网络中存在攻击者恶意构造大量ARP报文发往设备,会导致设备的CPU负担过重,从而造成其他功能无法正常运行甚至设备瘫痪。这种情况下,可以启用ARP报文限速功能来控制上送CPU的ARP报文的速率。但现场配置arp报文限速功能后,cpu依然很高,后来关闭了arp detection功能后,故障仍然存在。
3、继续排查,通过现场在CPU高时打印上送cpu的报文,以及收集如下信息查看arp进程的具体调用栈情况。
[S5800]_h
[S5800-hidecmd]dis task 110 slot 1 cpu 0
[S5800-hidecmd]dis task 110 slot 2 cpu 0
通过查看任务调用信息,发现下面的配置导致 ARP 进程偏高:
arp anti-attack source-mac filter
arp 广播报文默认上 cpu 处理 ,而 arp 单播回应报文只有目的 mac 是设备本身才会上送 cpu,默认情况下目的 mac 不是自己的不上,配置该命令后,导致过路的 arp 也会上送 cpu。
该命令的作用是:使能源 MAC 地址固定的 ARP 攻击检测之后,该特性会对上送 CPU 的 ARP 报文按照源 MAC 地址和 VLAN 进行统计。当在一定时间(5 秒)内收到某固定源 MAC 地址的 ARP 报文超过设定的阈值,不同模式的处理方式存在差异:在 filter 模式下会打印 Log 信息并对该源 MAC 地址对应的 ARP 报文进行过滤;在 monitor 模式下只打印 Log 信息,不过滤 ARP 报文。
如果超过阈值,因为模式为 filter,因此会下发 ACL 规则到硬件,丢弃 ARP 的攻击报文。另外,丢弃一段时间后,软件还会删除之前下发的 ACL,并重新检测。由于 ACL 的添加、删除涉及到操作硬件寄存器,而且因为 ACL 条目优先级排序,添、删 ACL 会引起块搬移(比如插入或移除整个 ACL 表中间的某一条,那么其后面的所有条目都要进行搬移),如果频繁添、删 ACL,而且设备中已经存在较多 ACL 条目的时候,就会导致 CPU 占用率偏高。
解决办法
现场通过取消 arp anti-attack source-mac filter 命令(或把 filter 改成 monitor),设备的 CPU 已恢复正常。
建议与总结
1、该问题的本质是现网环境中存在 arp 攻击,现场应该及时排查 arp 攻击源,否则大量的 arp 报文上送到网关,到时候可能也承受不住;
2、若环境中可能存在 arp 攻击时,可以配置 arp anti-attack source-mac monitor 来监测 arp 攻击情况,当发生 arp 攻击时,设备会产生 arp 攻击 LOG 告警信息,并且不会影响到设备 CPU 利用率。