交换机CPU占用率是指一段时间内CPU执行代码的非空闲时间与时间段总长度的比率,可反映某个时间段交换机CPU资源使用情况,其计算机公式为:CPU占用率=(总时间-空闲时间)/总时间。空闲时间是指CPU运行Idle任务的时间,Idle任务是一个低优先级任务,不完成具体工作,如果Idle任务得到了调度,就认为CPU当前处于空闲状态。系统的CPU占用率不是保持不变的,它是随着系统的运行和外部环境的变化而持续变化的。正常状态下,交换机的CPU占用率不会超过5%,交换机在采用堆叠方式,其CPU占用率不会超过8%,在配置功能较多的情况下,CPU占用率不会超过30%,如果CPU交换机占用率超过50%则视为不正常。
当交换机CPU处理的数据包过多、各类中断请求过多或部分任务进程占用了较长CPU处理时间时,CPU负载就会增加,无法及时调度其他任务,从而会导致出现业务异常、业务处理能力下降和很多网络故障等。
一般正常网络环境中,为确保网络不间断工作,会采用备份交换机的网状结构,各交换机同时会启用STP/SEP/RSTP/MSTP等生成树功能的协议,避免网络出现环路。在这些协议运行过程中,交换机CPU会周期性接收BPDU等报文来维持交换机端口Root/Alternate等角色,如果交换机CPU占用率过高,很可能导致BPDU报文不能及时发送和处理,交换机会认为到根桥的路径出现故障,从而重新选择ROOT端口,引起网络重新收敛,导致网络拓扑改变。如果交换机原来同时存在Alternate端口,交换机会将Alternate端口作为新的ROOT端口,进行数据收发,导致网络结构发生改变,也可能会导致网络出现环路。
为提高交换机之间流量带宽,交换机会启用LACP(链路汇聚控制协议),交换机物理端口在启用LACP协议后,会由交换机CPU发送LACPDU来完成相关汇聚任务,其后链路保活均由CPU进行LACP协议的计算完成。如果CPU占用率过高,就会导致交换机不能及时接收和发送LACPDU报文,从而引起Eth-Trunk将会链路关闭,造成网络中断。
远程管理交换机已经成为管理配置交换机的首选方式之一,远程管理和配置一般都是通过Telnet、SSH、Web和SNMP等协议方式与交换机建立会话来进行。当交换机CPU占用率过高时,交换机就无法处理这些会话响应,从而导致无法远程管理交换机,造成管理成本上升。
当交换机CPU占用率过高时,会导致对各类协议控制、组播等报文的转发不及时,交换机内存消耗会增加,从而导致后续协议控制、组播等报文会被丢弃和转发时延增大。需要说明的是,普通数据报文转发由交换机电子集成电路完成,无需CPU参与,因此CPU占用率高通常并不影响普通数据报文转发。
交换机正常运行时,CPU会处理数以百计的活动系统进程。由于交换机一直处于运行状态,即使无任何业务配置和网络数据包,其CPU占用率也不会为0。在一些应用场景下,交换机长时间运行时,CPU占用率一般不超过80%,短时间内CPU占用率不超过95%,可认为交换机状态是正常的。
在交换机应用了MSTP协议后,CPU占用率会同实例个数和活动端口数成正比,数量越多,用于计算和维护的CPU资源就会增多,在应用了VBST协议后,由于每个VLAN独立运行一个实例,因此在相同VLAN和端口数目下,VBST会比MSTP占用更多的CPU资源。
当一台三层交换机接收到路由更新消息时,交换机会占用CPU资源将路由信息更新。CPU占用率取决于路由更新信息的多少、更新频率、接受路由更新进程数量、堆叠交换机数量等,路由更新信息越多、更新频率越快、路由更新进程数越多、参与堆叠的交换机数量越多,CPU占用率就越高,对于堆叠交换机,路由信息还需要同步到其他成员交换机。
部分配置命令需CPU长时间参与也会导致CPU占用率暂时升高,这些命令主要有:用户视图下执行copy flash:/命令、配置内容很多的情况下执行Save命令和Display running-configuration命令、执行用于输出各类调试信息的Debug命令、执行持续时间长且数据包多的Ping命令、交换机端口启用了执行Portsecurity mac-address sticky相关命令时、还有利用交换机抓包的命令等。
在交换机堆叠环境中,由于主要业务运行在堆叠主交换机上,还需要周期性维护堆叠成员状态,因此主堆叠主交换机的CPU占用率比单台交换机运行时的CPU占用率高,堆叠成员交换机数量增多时,堆叠主交换机的CPU占用率也会相应升高。
有较多管理用户同时远程管理交换机时、交换机启动后有较多客户机生成MAC地址表时、交换机启用DHCP功能有大量DHCP请求时、增加数量较多的VLAN并将各端口加入VLAN中时、交换机端口频繁Up/Down时、网络流量增加时等。
除正常应用场景外,只要是交换机CPU占用率高,都可视为故障,应及时排除。
网络环路是造成交换机CPU占用率高的最常见最主要的原因。当出现网络环路时,交换机会发生MAC地址漂移,产生的广播风暴产生大量无效报文,会消耗交换机CPU资源。
网络震荡也是导致交换机CPU占用率的另一大重要原因,在出现网络震荡时,网络参数会频繁发生改变,交换机忙于网络切换事件,CPU就会增加工作量。
当网络中存在ARP病毒,交换机遭到DHCP攻击、BPDU攻击、SSH暴力破解等恶意攻击时,交换机CPU将不得不处理这些报文,导致CPU长时间处理这些攻击报文,造成交换机CPU占用率高,性能下降,从而引发其他业务的中断,影响正常的业务。
图1 确定故障流程
图2 交换机当前占用率最高的3个任务
当交换机部件出现故障后,部件会发送大量SRMI、SRMR等中断报文,其他正常部件也会发送大量的保活类报文给交换机CPU来连通交换机故障部件,而这些报文都会极大地消耗交换机CPU资源,造成交换机CPU占用率高。
这里以VLAN配置为例进行说明,实际需要的VLAN不多,但却建立了很多无效VLAN,而每建立一个VLAN时,即使没有客户机,交换机都会发送一条ACL,来捕获该VLAN中的ARP报文,如果VLAN过多,就会导致交换机CPU占用率高,还有在GVRP环境下频繁创建和删除VLAN,每发送一条命令,就会触发大量报文通信,也会造成交换机CPU占用率升高。
表1 可引起交换机CPU占用率增高的常见任务
当发现CPU占用率过高时,首先要确定CPU占用率高是否是正常现象,除了正常应用场景外,都可以视为是故障引起,再进行故障排除。正常的处理步骤为“确定故障现象、判定故障原因、进行故障修复”(因本文中涉及部分交换机操作命令,本文中所有命令以华为交换机操作命令和功能为例,其他品牌交换机均有类似命令和功能)。
可以通过几种方式来确认是什么任务、是什么报文和是交换机上哪个硬件模块引起的CPU占用率高,通过交换机当前任务、报文类型和模块接口可以直接找到在什么接口什么原因造成的故障,确定故障流程如图1。
图3 子模块占用交换机CPU的比例统计信息
图4 各类协议Drop数量
(1)获取CPU占用任务情况,确认高比例任务。在用户模式下,执行display cpuusage命令,可以查看各在线任务的CPU占用率,可以记录占用率最高的前3个任务名称(如图2),其占用率排名前3的任务分别是FTS、VIDL和bcmRX。表1为可引起交换机CPU占用率高的常见任务名称和功能描述。
(2)获取CPU占用率高的模块信息,确认高比例模块接口。在用户模式下,执行display cpu-usage [slave|slot slot-id]命令,slot-id在堆叠系统中表示堆叠ID,可以查看相关模块占用交换机CPU的比例统计信息(如图3),为交换机slot 0模块的硬件CPU占用率。
(3)获取CPU占用率高报文统计信息,确认高比例报文类型。在用户模式下,执行display cpu-defend statistics all命令,查看上送CPU报文的统计查询信息,获取报文类型,特别要关注丢弃计数(如图4),通过各类协议的Drop计数来确认是否存在冲击情况,如果某类协议存在的Drop数很大,则可以认为该协议存在冲击CPU情况。
依据收集到的各类信息,判断故障产生的原因。
(1)系统类原因。系统主要是对交换机中各部件进行管理,同时给其他业务和模块提供系统基础支持。系统类问题主要是操作系统本身故障和模块故障触发,操作系统故障一般是硬件故障或操作系统故障,模块类故障一般是模块硬件故障和配置原因,通常表现为 SRMI、SRMR、BCMDPC等中断处理相关的任务占用率较高,因此,如果出现系统CPU占用率较高且以上相关任务占用率排名靠前的情况,则可以判定为系统类故障原因。
(2)STP震荡原因。使用display cpu-defend statistics all可以得到各报文的统计值,各类报文统计是交接机启动后各类报文收发的总和,所以在交换机CPU占用率高的情况下,需隔一段时间运行一下这个命令,这样才能确保单位时间采集到的各类报文统计比较精确。可以通过display stp topology-change命令查看STP拓扑变化信息来判定是否是STP震荡原因,可以通过执行display stp tc-bpdu statistics命令查看端口上接收到的TC-BPDU统计,以确定TC报文的来源物理接口。
(3)路由协议原因。这里以OSPF协议为例,可以通过日志查看OSPF邻居状态Down的原因。执行display logbuffer命令,查看日志信息(如图5):其中NeighborDownImmediate reason关键字记录的是OSPF邻居Down的原因,具体原因见表2。
图5 交换机日志信息
图6 MAC地址漂移告警信息
(4)环路类原因。当交换机未启用生成树协议就有可能会形成环路,报文会在多个接口间转发,导致CPU占用率上升。使用display currentconfiguration,查看是否使能了MAC地址漂移告警功能,如果使能了该功能且存在MAC地址漂移现象,就会出现告警信息,如果未使能该功能,可在用户模式下执行loopdetect eth-loop alarm-only命令,当有MAC地址漂移时,就会有告警信息。图6所示,是交换机中有环路,其中MAC地址为0000-0ca8-0101的地址发生了漂移,漂移分别发生在GigabitEthernet1/0/3和GigabitEthernet1/0/2端口。
表2 OSPF邻居Down的原因
此外,如果交换机无法远程登录、在交换机上占用display interface命令查看接口统计信息时发现接口收到大量广播报文、占用串口登录交换机进行操作时,操作比较慢、通过Ping命令进行网络测试时,丢包严重、交换机上发生环路的VLAN的接口指示灯频繁闪烁、PC机上能收到大量的广播报文、交换机部署环路检测后,交换机出现环路告警都可以视为环路类原因。
(5)网络攻击类原因。常见的引起CPU占用率高的网络攻击包括ARP攻击、ARPMiss攻击、DHCP攻击以及TC BPDU攻击等,这些攻击行为的共同特点是攻击源产生大量的协议报文对交换机CPU进行冲击,因此可以在交换机上看到大量的报文上送统计。判断ARP攻击和ARPMiss攻击,可以通过执行display arp packet statistics命令获取ARP报文统计信息,重点关注ARP Pkt Received和ARP-Miss Msg Received统计信息,根据其统计值的增长情况判断网络攻击类型。执行debugging arp packet命令打开ARP报文调试开关,查看大量上送的ARP或ARP-Miss攻击源信息。判断DHCP攻击,可以通过执行display dhcp statistics命令获取DHCP报文统计信息,如果报文上送速度较快,说明存在DHCP攻击。
(6)配置错误类原因。由于网管同步操作或者用户命令大量输出信息到终端导致的,该类情况的发生一般伴随着特定的网络管理事件,配置错误会瞬间提高CPU占用率或造成交换机CPU短时间占用率升高,如果暂停配置或取消配置命令发现CPU占用率降低则视可配置错误原因。通过在用户模式下运行display cpuusage命令可以采集CPU占用率高时各任务的CPU占用率,当发现AGNT或AGT6任务CPU占用率过高时,就可以确定CPU占用率高是网管同步等网管操作引起的,当出现VT任务CPU占用率高时,可以确定是用户命令大量输出信息到终端引起的。
针对故障原因不同需采用不同的故障修复方法。
(1)硬件故障原因。判断故障根源可能为硬件故障时,请先尝试手工复位CPU占用率较高的交换机,去除交换机配置,如果复位后问题依然存在,可联系厂商进行处理。
(2)STP震荡原因。如果是用户接口Up/Down引起的STP拓扑变化,则在接口视图下通过执行stp edgedport enable命令,将接入侧端口配置为边缘端口,并执行stp bpdu-protection命令开启BPDU保护功能。如果是发现根桥不断改变造成震荡时,则需要每台交换机执行stp root-protection命令开启根保护功能。
(3)路由协议震荡原因。以OSPF路由协议为例,OSPF邻居失连的主要原因有接口链路震荡、大量LSA泛洪报文等。当发生接口链路震荡时,接口链路震荡会导致OSPF邻居关系震荡,可以通过日志信息查看接口Up/Down的记录情况,请对接口链路进行检查。如果有大量LSA泛洪报文时,会导致网络中产生大量的LS UPDATE消息,此时交换机忙于处理LS UPDATE,可能会导致Hello报文得不到及时处理,引起邻居状态Down,如果OSPF邻居超时时间配置小于20s,建议接口视图下通过ospf timer dead interval命令将OSPF邻居超时时间配置为20s以上。建议OSPF视图下通过sham-hello enable命令使能ospf sham-hello功能,允许交换机通过LSU等非hello报文维持邻居关系。
(4)网络环路故障。可以通过执行display cpu-usage[slave|slot slot-id]命令来确保是哪个子模块造成交换机CPU占用率高,发现后可以利用接口指示灯的闪烁情况和通过执行display interface来确认各接口流量情况,如果仍方便排除时,可在用户模式下执行loop-detect eth-loop alarm-only命令,查看发生MAC地址漂移的接口,也就是产生环路的接口,还可以采用1/2法通过拔网线的方式来确定发生环路的接口,排除环路故障或启动STP/RSTP/MSTP等生成树协议。
(5)网络攻击故障。如果是 ARP攻 击、ARP-Miss攻击和DHCP攻击,可以通过开启自动攻击溯源功能的方式及时检测攻击行为,如果网络中发生了攻击,则在被攻击的端口通过stp tc-protection命令开启保护功能,减少攻击对交换机的影响,可以在找到攻击源后,隔离接口或对攻击源进行故障排除。
(6)配置故障。用户操作引起的CPU占用率高一般不会持续很长时间,并且通常情况下不会影响业务,如果造成业务故障且造成交换机CPU占用率高,则为配置故障,请清除该配置。