分享是一种生活态度,求知,求真,分享工作,分享生活!

由 IP Input 进程引起的High CPU故障排除

Cisco iqianyue 1975次浏览 0个评论 扫描二维码

问题描述

我们经常会遇到High CPU的问题,一般来说CPU 分进程高和中断高两种。中断高很多时候是由于实时的流量造成的,要根据网络的实际情况具体分析,原因有很多种,在此不一一列举了。进程高,不同的进程也有 不同的root cause。 在比较常见的几种占用CPU资源进程中,有一种叫 IP Input。

在 IOS 中,我们把 SW process 叫做 IP Input 进程,顾名思义就是数据报文没有被硬件 switching cache 或者 CEF 处理,而是 punt 到 CPU 去做进一步的处理。对于一个数据包而言,有几种情况会被 punt 到 CPU。

  1. 在 switching cache 里没有该报文相关的条目。如该报文的目的地址是 1.1.1.1 而这个目的前缀在如接口所在的 cache 里找不到该条目,那么这个报文将上送CPU做进一步查找。
  2. 目的地址是到本机的报文。
  3. 广播报文。
  4. IP 头里携带 option 的报文。
  5. 需要协议转换的报文。
  6. 需要加密或者压缩的报文(如果有了 CSA(Compression Service Adapter)和 ESA(Encryption Service Adapter) 则不需要上送 CPU 只是本地处理了)。
  7. 分片报文或者需要重组的报文。(MTU设置的不合理,就可能会出发这类问题)。

故障诊断步骤

步骤 1,通过 show cpu process 或者 sh processes cpu sorted | exclude 0.00 来查看是 CPU 高,CPU 资源是否是被 IP Input 或者其他资源占用了。

步骤 2,如果是 IP Input 进程导致的 CPU 利用率高,那么执行 show interface statusshow interface,来查看哪些接口有较多的流量需要转发,以及这些接口是用何种转发机制, (fast switching / cef switching /processor)

步骤 3,show ip traffic 的输出,可以告诉我们是哪类流量增长最快,之后我们再检查一下这类流量是否需要上送 CPU 做进一步处理的(参考上述第一部分)。就能得出一个大致的结论—-High CPU 问题是什么流量导致的。

当然,我们也可以通过 debug ip packet(detail) 来更直接地查看到底是什么样的报文上送到CPU触发了CPU High,但是由于此时CPU的利用率已经很高了,所以建议先执行

之后再执行 logging buffered,这样 Debug 的结果将被直接记录到 log buffer 里,而不会再 session 里不停的弹出。最后,show log 就可以看到具体的报文了。

现在可以开始 debug:

Debug最长不能超过 3 到 5 秒钟。可以使用 undebug all 命令停止:

可以使用show logging 命令检查结果:

该log显示:

  • 每 4ms 收到一个包
  • 报文的源 IP 地址是 192.168.40.53
  • 报文从 interface Ethernet0/1 进入的.
  • 这些上送 CPU 的报文有不同的destination 地址.
  • 这些报文时从 interface Ethernet0/0 发出去的
  • 报文的下一跳是 10.200.40.1
  • 报文是 ICMP requests (type=8)

在该例中,可以看到IP Input 进程中的 High CPU 是由源自 IP 地址 192.168.40.53 的 ping flood 造成的。

通过这种方式,SYN flood 可以很容易地被发现,因为在 debugging 输出中发现了 SYN flag :


iqianyue , 版权所有丨如未注明 , 均为原创,转载请注明iqianyue
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址