45交换机由于K5ForerunnerPacketMa和Adj SameIf Fail引起的highCPU 案例
一, 首先,在发现45交换机发生high CPU的时候我们一般抓取以下几条命令来先对问题进行定位:
show process cpu sorted | ex 0.00show platform health
- show platform cpu packet statistics
- debug platform packet all receive buffer
- show platform cpu packet buffered
二,案例症状以及分析过程:
1, 在HIGH CPU是由于中断引起的排错过程中,我们要去找到时什么样的流量被送到CPU去处理。 但是如果我们查看流量并不能判断是属于哪一种固定类型的流量的时候,排错就会变得比较困难。
如果High CPU是由于
K5ForerunnerPacketMa & Adj SameIf Fail 而引起的,这种情况下很可能我们并不能准确的通过查看送去CPU的包来判断是哪一种类型的流量被送去CPU。(如果入向的流量是从许多三层接口进入的……)
2, 从下面的命令中我们发现
K5ForerunnerPacketMa 占用了许多的CPU。 Forerunner是在引擎上的一个ASIC部件,用来处理送向或者来自CPU的流量。我们经常在中断(流量送去CPU)引起的high cpu情况下发现这个进程和另外一个叫做
K5CpuMan 的进程一起占用较高的CPU资源。
Cisco4500#show platform health
%CPU %CPU RunTimeMax Priority Average %CPU Total
Target Actual Target Actual Fg Bg 5Sec Min Hour CPU
:
K5CpuMan Review
30.00 57.89
30 12 100 500 81 98 70 6499:39
K5ForerunnerPacketMa
2.00 27.83
4 0 100 500 34 43 30 2583:01
【我们发现在show platform health中这两个进程的实际CPU占用率大大超过了目标最大的CPU利用率】
3, 在上面的情况下,当我们不能确定是哪一种流量从去了CPU,我们需要查看下面的命令来查看CPU中一些Q (每个Q对应了一种需要CPU处理的流量的情况)
Cisco4500#sh platform cpu packet statistics
Packets Received by Packet Queue
Queue Total 5 sec avg 1 min avg 5 min avg 1 hour avg
---------------------- --------------- --------- --------- --------- ----------
Host Learning 656886 0 0 0 0
L2 Control 94211898 85 86 77 66
Input ACL log, unreach 199 0 0 0 0
Ip Option 3182 0 0 0 0
Ttl Expired 13345736 12 3 1 0
Output ACL log, unreach 547932 0 0 0 0
Adj SameIf Fail 1757209937 3307 4532 3554 3719 <<<< 对比其他的Q发现这个Q增长最快
Bfd 4965 0 0 0 0
L2 router to CPU, 7 267385257 379 418 345 327
L3 Glean, 7 19093910 19 12 13 17
L3 Fwd, 7 38337667 91 102 92 82
L3 Receive, 7 10673861 12 5 7 2
Packets Dropped by Packet Queue
Queue Total 5 sec avg 1 min avg 5 min avg 1 hour avg
---------------------- --------------- --------- --------- --------- ----------
L2 Control 2 0 0 0 0
Adj SameIf Fail 3902732 5 0 4 11 <<<< 我们也在这一个Q发现有丢包
L2 router to CPU, 7 165 0 0 0 0
L3 Fwd, 7 688 0 0 0 0
三, 解决方法:
在所有的三层接口和SVI口下配置:no ip redirects
Adj sameif fail 的包指的是那些被从入向接口又送出去的包(出入设备同接口)。我们知道,这种情况下,这样的包需要送去CPU来进行ICMP重定向。如果一个IP单播包被从它进入设备的接口送出去,这个包需要送去CPU处理,从而CPU要发送ICMP消息给源。 所以,通过禁用ICMP重定向可以减小CPU的利用率。
四, 一般情况下,我们建议在交换机三层接口下添加如下命令来防止一些CPU利用率过高的情况:
no ip redirects <===关闭ICMP重定向功能
no ip unreachable <===关闭发送不可达消息功能
no ip proxy-arp <===关闭代理ARP功能
在平常的case中,利用这三条命令可以规避许多high CPU情况发生,并且也不会对交换机设备转发流量产生影响。