CPU占用率高问题处理方法

  H3C S9500、Quidway S8500交换机在发现CPU占用率高时的处理方法如下:

  第一步、确认CPU占用率高的单板

  使用display CPU命令察看各槽位单板CPU占用率情况;

  [H3C]display cpu

  …………

  Board 6 CPU busy status:

  35% in last 5 seconds

  59% in last 1 minute

  51% in last 5 minutes

  Board 7 CPU busy status:

  13% in last 5 seconds

  13% in last 1 minute

  13% in last 5 minutes

  Board 8 CPU busy status:

  28% in last 5 seconds

  23% in last 1 minute

  18% in last 5 minutes

  …………

  正常的单板CPU占用率一般都是在20%以内的。但有时单板CPU的占用率有可能瞬间升高,比如在通过Telnet方式收集设备诊断信息时。此时,应根据单板的5分钟内的平均占用率来判断该单板的CPU占用率是否异常。比如在上面的例子中可以判断出6号槽位的单板CPU占用率异常。另外,还需要隔半分钟或一分钟重复查看几次CPU占用率,以此来判断CPU占用率的变化情况。

  第二步、察看并确认CPU占用率高是否对CPU处理报文造成影响

  一般来说,当CPU占用率高时,会造成CPU无法响应或处理部分上CPU的协议报文,从而对网络造成相应的影响。在诊断模式下使用_txerr display slotclear命令察看CPU队列丢包情况;命令中的参数clear表示每次察看后会将队列丢包计数清零,所以请每隔半分钟或一分钟多次执行该命令,确定是哪个队列有持续的相对较多的丢包计数增长。该命令仅适用于接口板,对于主控板不适用。

  terminal debugging

  terminal monitor

  system-view

  [H3C]_

  [H3C_hidecmd]_d c v \\该命令将显示隐藏模式和诊断模式下的隐含命令

  [H3C-hidecmd]en

  [H3C-testdiag]_txerr display slot 6 clear (V5平台直接输入)

  Tx queue status:

  TxResPkt=0 TxResBf=0 TxResFailPkt=0

  Tx queue status:

  TxQueLen=0 TxQuePtr=1642

  TxTaskPtr=1642 TxInQueueErr=0

  Rec int statistics:

  intGenScan =612387

  616 624 632 0 584 616 624 632 0 584

  616 624 632 0 584 616 624 632 0 584

  ………….

  616 624 632 0 584 616 624 632 0 584

  616 624 632 0 584 616 624 632 0 584

  Rec control statistics:

  RecInt =6975

  Rec Max speed statistics:

  60 22 19 43

  0 0 0 59

  110

  Rec AU statistics:

  22

  Rec discard statistics:

  0 0 0 29

  0 0 0 0

  Rec AU discard statistics:

  0

  \\在Rec discard statistics下面的数值从左至右从上到下,分别代表0、1、2、3对列和4、5、6、7对列

  第三步、查看是哪个任务进程运行异常造成CPU占用率高

  在隐含模式下,用_system-monitor命令察看CPU各进程运行情况;(V5平台,隐藏模式下直接用display cpu-usage slot 6)

  terminal debugging

  terminal monitor

  system-view

  [H3C]_

  [H3C-hidecmd]

  [H3C-hidecmd]_system-monitor start   \\打开监控开关后

  [H3C-hidecmd]_system-monitor stop \\监控5秒后关闭监控开关

  [H3C-hidecmd]_system-monitor print 6  \\并查询指定槽位单板的任务信息

  [H3C-hidecmd]

  *0.8361548 S9500 DRVL2/8/DBG_DBG:Slot=4;

  Total Monitoring time 10718 ms

  Task Name Max Run(ms) Max Pend(ms) Running(ms) Percent(%)

  ---------------------------------------------------

  RPCQ 0 0 0 0.00

  WEIL 10 98 4991 6.56

  SYST 1 87 103 0.96

  …………

  HAND 1 1061 2 0.01

  PRX0 87 13 4522 2.19

  PRX1 0 0 0 0.00

  BOTT 1 2101 2 0.01

  zhTx 4 189 394 3.67

  L2ST 1 98 94 0.87

  L2Ma 1 4990 33 0.30

  L2Ch 0 0 0 0.00

  L3MC 1 98 98 0.91

  …………

  常用CPU进程说明及协议报文上送CPU对列说明

  WEIL系统空闲进程

  co0控制台进程

  ROUT路由协议进程,其中包括组播路由

  AGNT SNMP网管代理进程

  TRAPSNMP网管陷阱进程

  NTPTNTP网络时间进程

  L2PS接口板端口状态轮循任务

  HAND板间通信握手进程

  PRX0接口板收包进程

  zhTx接口板发包任务

  第四步、对上CPU报文抓包并分析报文定位故障原因

  捕捉上CPU报文有2种方法:

  1)镜像上CPU报文到物理接口

  使用cpu-mirror命令镜像上CPU报文到交换机物理接口,并连接PC进行抓包分析,定位CPU占用率高的原因;该命令适用于1235或者1270之后的版本,该命令在1226-1233版本和1265-1269版本存在致命缺陷,请不要使用。使用该命令抓包完成后请立即通过undo命令关闭该功能。

  [H3C]cpu-mirror slot 8 mirrored-to e2/1/1

  2)在诊断模式下使用命令在控制台上打印上送CPU的报文

  使用命令_rxpkt slotlengthnumbersqueue来打印上送CPU处理的报文;该方式适用于不能应用cpu-mirror命令的版本和交换机上没有电口用于连接抓包PC的情况下。

  将打印出来的报文保存为txt文件,转用抓包工具Ethereal换成Ethereal可读格式,然后具体分析是什么报文造成CPU占用率高。

  terminal debugging

  terminal monitor

  sys

  [H3C]en_

  [H3C-testdiag]_rxpkt slot 6 length 64 numbers 200

  //如无法确认可多执行几次,CPU利用率超过50%慎用

  [H3C-testdiag]

  *0.4583328 H3C DIAGCLI/6/DBG_NOTICE:Slot=3; [PRX0]:

  Time on LPU: 2008-07-05 17:31:38 310ms

  Receive packet :

  DevNum=12, PhysicalPortNo=49, PacketLen=64, Queue=4, cpucode=248, left=199

  vlanID=15, usrPrio=7, DropPre=0

  0000: 01 00 5e 00 00 12 00 0f e2 1e 22 04 81 00 e0 0f

  0010: 08 00 45 c0 00 28 bd b9 00 00 ff 70 30 8c 0b 9c

  0020: e0 b1 e0 00 00 12 21 0f 6e 01 00 01 84 9e 0b 9c

  0030: e0 b3 00 00 00 00 00 00 00 00 00 00 00 00 00 00

  。。。。。。

  在pc上进行转换,然后用etheral打开转化的抓包文件进行分析:

CPU占用率高问题处理方法.png

  使用etheral工具打开抓包文件,分析哪些地址发出的报文特别多导致设备CPU利用率高,可能是攻击或者发生了环路。

  使用etherealplus进行解析。该文件需要放在wireshark或ethereal安装目录下。

2015年10月