号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
下午好,我的网工朋友。
在信息时代下,不仅仅在网络工程领域,高CPU占用率都是一个非常常见的问题,尤其是在交换机、路由器等设备上。
这种情况不仅会影响网络性能,还可能导致服务中断和数据丢失。
今天就和你来探索一下当遇见交换机、路由器等设备CPU占用率过高的故障时应该怎样解决。
今日文章阅读福利:《 cisco路由器配置(实战篇) 》
私信发送暗号“思科”,即可获取思科官方教材资源,以及顺手给你打包了一些别的好东西,进一步提升你的技术视野。
01 CPU占用率是啥意思?
CPU占用率,就是一个时间段内,CPU执行代码的时间与时间段总长度的比率。CPU占用率常常是衡量设备性能的重要指标之一。
CPU占用率高,是设备本身的一种现象,直观表现为display cpu-usage命令查询结果中整机CPU占用率“CPU usage”偏高,如超过70%。在网络运行中CPU高常常会导致其他业务异常,如BGP震荡、VRRP频繁切换、甚至设备无法登录。以下讨论的原因及步骤基于CPU占用率高这个现象。
通常,整机CPU占用率过高,是由于某些任务的CPU占用率居高不下导致的。具体导致某任务CPU占用率高的可能原因:
- 上送CPU报文过多,如环路或DoS报文攻击
- STP网络频繁震荡,收到大量TC报文,造成设备频繁删除MAC表和ARP表项
- 设备产生海量日志,占用大量CPU资源
02 故障诊断流程
详细处理流程如下图所示。
03 故障处理步骤
01 检查占用CPU高的任务名称
执行命令display cpu-usage,查看各任务的CPU占用率。
记录CPU占用率超过70%的任务名称。
这个取值并非绝对数值,有可能某些任务执行时就需要占用70%的CPU而对业务不会造成影响,也有可能某些任务占用CPU 30%时就会对业务造成影响。应该根据实际情况判断。
02 检查是否上送CPU的报文太多
执行命令display cpu-defend statistics,查看上送CPU报文的统计信息,关注丢弃计数。
<Huawei> display cpu-defend statistics all
-----------------------------------------------------------------------
Packet Type Pass Packets Drop Packets
-----------------------------------------------------------------------
8021X 0 0
arp-miss 1 0
arp-reply 5 0
arp-request 1450113 25597
bfd 0 0
bgp 0 0
dhcp-client 114693 136586
dhcp-server 0 0
dns 0 0
fib-hit 0 0
ftp 717 0
fw-dns 0 0
fw-ftp 0 0
fw-http 0 0
fw-rtsp 0 0
fw-sip 0 0
gvrp 0 0
http 798 0
hw-tacacs 0 0
icmp 10 0
igmp 0 0
ipsec 0 0
isis 0 0
lacp 0 0
lldp 33959 0
ntp 0 0
ospf 1569 0
pim 0 0
pppoe 0 0
radius 0 0
rip 0 0
snmp 0 0
ssh 0 0
stp 0 0
tcp 7671 0
telnet 71149 0
ttl-expired 656 0
udp-helper 0 0
unknown-multicast 6 0
unknown-packet 94189 0
vrrp 0 0
-----------------------------------------------------------------------
- 如果某种类型报文“Drop”计数较大,且对应上一步中占用的CPU使用率较高,可以判断为发生了报文攻击。
- 如果没有发现有流量过大的报文,请执行步骤3。
03 检查是否TC报文过多
支持STP的设备上,STP使能情况下,设备在接收到TC-BPDU报文时,会删除MAC地址表项和ARP表项。如果有人伪造TC-BPDU报文恶意攻击,设备短时间内会收到很多TC-BPDU报文,频繁的删除操作会导致CPU占用率比较高。
执行命令display stp,查看接口下收到的TC报文和TCN报文计数。
<Huawei> display stp interface Eth2/0/1
----[CIST][Port2(Ethernet2/0/1)][FORWARDING]----
Port Protocol :Enabled
Port Role :Designated Port
Port Priority :128
Port Cost(Dot1T ) :Config=auto / Active=199999
Designated Bridge/Port :4096.00e0-fc01-0005 / 128.2
Port Edged :Config=default / Active=disabled
Point-to-point :Config=auto / Active=true
Transit Limit :147 packets/hello-time
Protection Type :None
Port STP Mode :MSTP
Port Protocol Type :Config=auto / Active=dot1s
PortTimes :Hello 2s MaxAge 20s FwDly 15s RemHop 20
TC or TCN send :1
TC or TCN received :0
BPDU Sent :124008
TCN: 0, Config: 0, RST: 0, MST: 124008
BPDU Received :0
TCN: 0, Config: 0, RST: 0, MST: 0
- 如果该值很大,系统视图下执行命令stp tc-protection配置对TC类型BPDU报文的抑制。配置此命令后,默认每个Hello周期处理3个TC报文。可以根据实际情况通过stp tc-protection threshold命令指定处理的报文数量门限值,可以通过stp timer hello命令修改Hello周期的时长。
- 如果TC报文数量不多,请执行步骤4。
04 检查网络是否有环路
当设备的某个VLAN中包含较多接口时,如果有两个接口形成环路,则报文会在多个接口之间一直转发,会导致CPU占用率上升。
执行命令display current-configuration,查看是否使能了MAC地址漂移告警功能。
#
loop-detect eth-loop alarm-only
#
- 如果没有,执行命令loop-detect eth-loop alarm-only配置当发生MAC地址漂移时产生告警。此时如果网络中有环路,当设备两个接口学习到同一个MAC表项时,会产生告警。如:
Feb 22 2022 18:42:50 Huawei L2IFPPI/4/MAC_FLAPPING_ALARM:OID 1.3.6.1.4.1.2011.5.25.42.2.1.7.12The mac-address has flap value . (L2IfPort=0,entPhysicalIndex=0, BaseTrapSeverity=4, BaseTrapProbableCause=549, BaseTrapEventType=1, MacAdd=0000-c0a8-0101,vlanid=100, FormerIfDescName=Ethernet1/0/0,CurrentIfDescName=Ethernet1/0/1,DeviceName=HUAWEI)
- 根据告警提示信息,查看相应的接口连接以及组网需求。
- 如果不需要环网,根据组网图,将其中一个端口shutdown处理。
- 如果确实需要环网,关闭Loop Detection功能,并启动STP等破环协议。
- 如果设备已经配置了loop-detect eth-loop alarm-only,但是没有看到告警,请执行步骤5。
05 检查设备是否产生海量日志
某些异常情况下如受到攻击、运行中发生了错误、端口频繁Up/Down等,设备会不停打印诊断信息或日志信息。此时对存储器要进行频繁的读写操作,会造成CPU占用率升高。
执行命令display logbuffer,查看是否有大量的异常日志。
整理:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部