本文解释了中断使 CPU 使用率升高的原因,并且提供了故障排除提示和指南。
本文档没有任何特定的要求。
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
在中断级别上的高 CPU 使用率主要是由在中断级别上处理的信息包造成的。任何时候,如果控制台或者路由器的辅助端口的输出是字符,即会产生中断。
与路由器的处理速度相比,通用异步接收器/发射机(UART)的速度缓慢,因此控制台或辅助设备中断不太可能(尽管有可能)引起路由器上的高CPU利用率(除非路由器正在使用大量的tty线路)。
由于中断而导致 CPU 使用率较高的原因有如下几个:
要对这个潜在问题进行故障排除,请验证以下事项:
检查路由器是否正在运行 Cisco Express Forwarding (CEF):
验证 ip cef 全局配置命令的配置。
通过发出 show ip cef summary 命令验证 Cisco Express Forwarding (CEF) 是否已启用并且在正常运行。
验证是否已经在所有接口上将 Cisco Express Forwarding (CEF) 启用为交换路径。可以在 show cef interface 和 show ip interface 输出中看到此信息。如果配置了Cisco快速转发,但没有在接口上启用,就意味着Cisco快速转发不支持接口封装。验证Cisco快速转发是否可操作,也就是使用Cisco快速转发,通过查看show cef not-cef-switched来检查信息包是否通过路由器。
使用 show cef drop 命令和 show interfaces switching 命令(这是您寻找缓存缺失可以使用的隐藏命令),验证 Cisco 快速转发没有丢弃信息包。如果出现这种情况,请参阅 CEF 故障排除页。
验证是否有任何接口配置了较长的访问列表。
一般来说,任何访问列表只要内容超过十行即可视为较长。
反复使用较长的访问列表会占用很多 CPU 资源。如果带有NetFlow交换,当流量已经输入高速缓冲存储器时,您不再需要检查访问控制列表。因此,在这种情况下,NetFlow 交换会很有用。可通过发出 ip route-cache flow 命令来启用 NetFlow 交换。
请注意,如果在接口上同时配置了Cisco Express Forwarding和NetFlow,则使用Cisco Express Forwarding做出交换决策。
验证路由器上是否配置了 NetFlow 交换:
通过发出 show ip cache flow 命令检查统计信息。查看新的每秒流量。
如果未启用 Cisco Express Forwarding (CEF),则将其启用,以便加快交换决策的速度。
如果没有较长的访问列表,请尝试禁用 NetFlow 交换。
校准错误是由读取和写入未校准而导致的。例如,内存地址不是两位偶倍数的2字节读取是校验错误。
校准错误通常是由软件 Bug 造成的。CPU更正此错误,但是如果需执行的更正很多,那么这时CPU会增强。有关此类错误的故障排除信息,请参阅欺骗性访问、校准错误和欺骗性中断故障排除。
show interfaces 和 show interfaces switching(隐藏)命令的输出内容提供了关于过载接口的信息。要在日志文件中获取这些命令的输出以便后续分析,遵从下面的步骤。
发出 terminal length 0 命令。
检查 show interfaces 的输出。检查接口上的负载和扼杀数。默认情况下,负载是在五分钟内计算的平均值。要更改此间隔,请发出 load-interval seconds 命令,其中 seconds 代表使用数据来计算负载统计信息的时间长度。所用的值需要是 30 的倍数。
扼杀数可以很好地表明路由器已过载。它们可显示接口上的接收器被禁用的次数,可能是由于缓冲区或处理器超载导致的。与中断级别的高CPU利用率相同,阈值也可表示路由器的流量超载。
检查show interfaces switching (hidden)命令的输出,查看什么类型的数据流(协议和交换路径)正通过超载接口。如果一些接口上的流量超载,则应考虑重新设计网络中的数据流量,或者升级硬件。
网络环路也会是导致数据流过载的原因之一。验证您的网络拓扑。
如果单个设备有可能以极高的速率生成数据包,从而造成路由器过载,则可以通过在过载接口的配置中添加ip accounting mac-address {input|output} 接口配置命令来确定该设备的MAC地址。
show interfaces [ ] mac-accounting 命令可显示收集的信息。一旦找到源设备的 MAC 地址,则可通过检查 show ip arp 命令的输出找到对应的 IP 地址。
如果您怀疑运行在路由器上的 Cisco IOS 软件版本有 Bug,您可以检查类似环境中具有类似症状的 Bug Toolkit(仅限于注册用户)有无 Bug。
即使没有流量,软件也能继续监控使用CPU资源的随路信令(CAS)。
即使没有数据流,ATM接口也将发出空信元(每个ATM标准),并继续使用CPU资源。
如果 PXF 向 RP 传送的数据包过多,可能会导致 RP 过载。通过发出 show pxf accounting summary 命令,可将传送的数据包数量与传入的数据包总量进行比较。使用同一个命令查明信息包为什么被踢到RP。这可能是由于软件中存在 Bug,也可能是因为 PXF 不支持此数据流。
CPU 分析是一种用于确定 CPU 使用情况的低开销方式。系统的工作原理是每四毫秒对处理器位置进行一次采样。对内存中这种位置的计数会逐步增加。这种 CPU 使用率的根本原因取决于 CPU 分析。
要执行 CPU 分析,请完成以下步骤。当您遇到 CPU 使用率较高的情况时,便已完成 CPU 分析。
注意:在启用模式下必须键入所有这些命令
获取show region的输出内容,然后提取关于起始地址、结束地址以及main:text区域的大小
获取 show memory statistics 的输出内容,并检查处理器内存中最大块的大小。
执行 profile task interrupt,以便仅针对中断来配置分析。
将main:text区域的大小与最大可用处理器内存块的大小进行比较。理想情况下,最大块应大于main:text。
如果最大块小于main:text大小,则调整粒度以确保分析能够获取处理器内存块。
如果最大块大于main:text区域,请使用粒度4。
如果最大块大于main:text区域的一半,请使用粒度8。
如果最大块大于main:text区域的四分之一,请使用粒度10(十六进制为16)。
注意:粒度必须是2的幂,并且应尽可能小(但不能小于4)
通过执行 profile 开始分析
Profile <starting address> <ending address> <granularity value>
起始地址和结束地址是在步骤 1 确定的。
等 5 到 10 分钟
通过执行 profile stop 停止分析
获取 show profile terse 的输出内容。
通过执行 unprofile all 确保释放所有内存
此命令用于确定接口上的活动交换路径。有关 Cisco IOS 软件中交换路径的详细信息,请参阅配置交换路径。
以下是针对一个接口的 show interfaces switching 命令的示例输出:
RouterA#show interfaces switching Ethernet0 Throttle count 0 Drops RP 0 SP 0 SPD Flushes Fast 0 SSE 0 SPD Aggress Fast 0 SPD Priority Inputs 0 Drops 0 Protocol Path Pkts In Chars In Pkts Out Chars Out Other Process 0 0 595 35700 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IP Process 4 456 4 456 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IPX Process 0 0 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 Trans. Bridge Process 0 0 0 0 Cache misses 0 Fast 11 660 0 0 Auton/SSE 0 0 0 0 DEC MOP Process 0 0 10 770 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 ARP Process 1 60 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 CDP Process 200 63700 100 31183 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0
命令的输出将列出接口上配置的所有协议的交换路径,因此您可以很容易看到经过路由器的数据流的种类和数量。下表解释了输出字段:
字段 | 定义 |
---|---|
Process | 处理的数据包。这些数据包可能是发往路由器的数据包,或者是快速交换缓存中没有其条目的数据包。 |
Cache misses | 快速交换缓存中没有其条目的数据包。此目的地的第一个信息包(或数据流----取决于所配置的快速交换类型)将被处理。所有后续数据包将进行快速交换,除非传出接口上已明确禁用快速交换。 |
Fast | 快速交换的数据包。默认情况下,快速交换处于启用状态。 |
Auton/SSE | 自治交换数据包、硅交换数据包或分布式交换数据包。仅在配有交换机处理器或硅交换处理器的Cisco 7000系列路由器(分别用于自主交换或硅交换)或具有VIP的Cisco 7500系列路由器(用于分布式交换)上可用。 |
当CPU使用率超过75%时,此脚本将输出保存在flash:CPU_Profile上:
service internal event manager applet High_CPU event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.6 get-type next entry-opge entry-val 75 exit-time 10 poll-interval 5 action 0.1 syslog msg "CPU Utilization is high" action 0.2 cli command "enable" action 0.4 cli command "show log | append flash:CPU_Profile.txt" action 0.5 cli command "show process cpu sorted | append flash:CPU_Profile.txt" action 0.6 cli command "show interfaces | append flash:CPU_Profile.txt" action 1.1 cli command "configure terminal" action 1.2 cli command "profile xxxxxxx yyyyyyyyZ" action 1.3 cli command "profile start" action 2.3 syslog msg "Entering TCLSH" action 2.4 cli command "tclsh" action 2.5 cli command "after 240000" action 2.6 cli command "exit" action 2.9 syslog msg "Exiting TCLSH" action 3.0 cli command "profile stop" action 3.1 cli command "show profile terse | append flash:CPU_Profile.txt" action 3.2 cli command "clear profile" action 3.3 cli command "unprofile all" action 4.1 syslog msg "Finished logging information to flash:CPU_Profile.txt..." action 4.2 cli command "end"
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
29-May-2008 |
初始版本 |