目录

简介

先决条件

要求

使用的组件

规则

由于中断而导致 CPU 使用率较高的可能原因

交换路径不当

CPU 正在执行校准更正

路由器数据流过载

软件 Bug

路由器上配置了语音端口

路由器上有活动的异步传输模式 (ATM) 接口

存在过多面向 RP 的并行高速转发 (PXF) 传送情况

CPU 分析

show interfaces switching 命令

用于在 CPU 使用率较高的情况下获取 CPU 分析数据的示例脚本

相关信息

简介

本文解释了中断使 CPU 使用率升高的原因，并且提供了故障排除提示和指南。

先决条件

要求

本文档没有任何特定的要求。

使用的组件

本文档不限于特定的软件和硬件版本。

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您使用的是真实网络，请确保您已经了解所有命令的潜在影响。

规则

有关文件规则的更多信息请参见“ Cisco技术提示规则”。

由于中断而导致 CPU 使用率较高的可能原因

在中断级别上的高 CPU 使用率主要是由在中断级别上处理的信息包造成的。任何时候，如果控制台或者路由器的辅助端口的输出是字符，即会产生中断。

与路由器的处理速度相比，通用异步接收器/发射机(UART)的速度缓慢，因此控制台或辅助设备中断不太可能（尽管有可能）引起路由器上的高CPU利用率(除非路由器正在使用大量的tty线路)。

由于中断而导致 CPU 使用率较高的原因有如下几个：

- 路由器上配置的交换路径不当

- CPU 正在执行校准更正

- 路由器数据流过载

- 路由器上运行的 Cisco IOS® 软件中存在 Bug

- 路由器上配置了语音端口

- 路由器上有活动的异步传输模式 (ATM) 接口

- 从 PXF 发送到路由处理器 (RP) 的数据包过多

交换路径不当

要对这个潜在问题进行故障排除，请验证以下事项：

- 检查路由器是否正在运行 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 交换。

- 请注意，如果接口上同时配置了思科快速转发和NetFlow，则思科快速转发将用于做出交换决策。

- 验证路由器上是否配置了 NetFlow 交换：

- 通过发出 show ip cache flow 命令检查统计信息。查看新的每秒流量。

- 如果未启用 Cisco Express Forwarding (CEF)，则将其启用，以便加快交换决策的速度。

- 如果没有较长的访问列表，请尝试禁用 NetFlow 交换。

CPU 正在执行校准更正

校准错误是由读取和写入未校准而导致的。例如，内存地址不是两位偶倍数的2字节读取是校验错误。

校准错误通常是由软件 Bug 造成的。CPU更正此错误，但是如果需执行的更正很多，那么这时CPU会增强。有关此类错误的故障排除信息，请参阅欺骗性访问、校准错误和欺骗性中断故障排除。

路由器数据流过载

show interfaces 和 show interfaces switching（隐藏）命令的输出内容提供了关于过载接口的信息。要在日志文件中获取这些命令的输出以便后续分析，遵从下面的步骤。

1. 发出 terminal length 0 命令。

2. 检查 show interfaces 的输出。检查接口上的负载和扼杀数。默认情况下，负载是在五分钟内计算的平均值。要更改此间隔，请发出 load-interval seconds 命令，其中 seconds 代表使用数据来计算负载统计信息的时间长度。所用的值需要是 30 的倍数。

扼杀数可以很好地表明路由器已过载。它们可显示接口上的接收器被禁用的次数，可能是由于缓冲区或处理器超载导致的。与中断级别的高CPU利用率相同，阈值也可表示路由器的流量超载。

3. 检查show interfaces switching (hidden)命令的输出，查看什么类型的数据流(协议和交换路径)正通过超载接口。如果一些接口上的流量超载，则应考虑重新设计网络中的数据流量，或者升级硬件。

4. 网络环路也会是导致数据流过载的原因之一。验证您的网络拓扑。

如果单个设备可能以极高的速率生成数据包，从而使路由器过载，则可以通过将ip accounting mac-address {input|output}接口配置命令添加到过载接口的配置中来确定该设备的MAC地址。

show interfaces [ ] mac-accounting 命令可显示收集的信息。一旦找到源设备的 MAC 地址，则可通过检查 show ip arp 命令的输出找到对应的 IP 地址。

软件 Bug

如果您怀疑运行在路由器上的 Cisco IOS 软件版本有 Bug，您可以检查类似环境中具有类似症状的 Bug Toolkit（仅限于注册用户）有无 Bug。

路由器上配置了语音端口

即使没有流量，软件也能继续监控使用CPU资源的随路信令(CAS)。

路由器上有活动的异步传输模式 (ATM) 接口

即使没有数据流，ATM接口也将发出空信元(每个ATM标准)，并继续使用CPU资源。

存在过多面向 RP 的并行高速转发 (PXF) 传送情况

如果 PXF 向 RP 传送的数据包过多，可能会导致 RP 过载。通过发出 show pxf accounting summary 命令，可将传送的数据包数量与传入的数据包总量进行比较。使用同一个命令查明信息包为什么被踢到RP。这可能是由于软件中存在 Bug，也可能是因为 PXF 不支持此数据流。

CPU 分析

CPU 分析是一种用于确定 CPU 使用情况的低开销方式。系统的工作原理是每四毫秒对处理器位置进行一次采样。对内存中这种位置的计数会逐步增加。这种 CPU 使用率的根本原因取决于 CPU 分析。

要执行 CPU 分析，请完成以下步骤。当您遇到 CPU 使用率较高的情况时，便已完成 CPU 分析。

注意：在启用模式下时，必须键入所有这些命令

1. 捕获show region的输出，并获取起始地址、结束地址和main:text区域的大小

2. 获取 show memory statistics 的输出内容，并检查处理器内存中最大块的大小。

3. 执行 profile task interrupt，以便仅针对中断来配置分析。

4. 将main:text区域的大小与自由处理器内存最大块的大小进行比较。理想情况下，最大块应大于main:text。

如果最大块小于main:text大小，则调整粒度以确保分析能够获得处理器内存块。

如果最大块大于main:text区域，请使用粒度4。

如果最大块大于main:text区域的一半，请使用粒度8。

如果最大块大于main:text区域的四分之一，请使用粒度10（十六进制为16）。

注意：粒度必须是2的幂，并且应尽可能小（但不应小于4）

5. 通过执行 profile 开始分析

Profile <starting address> <ending address> <granularity value>

起始地址和结束地址是在步骤 1 确定的。

6. 等 5 到 10 分钟

7. 通过执行 profile stop 停止分析

8. 获取 show profile terse 的输出内容。

9. 通过执行 unprofile all 确保释放所有内存

show interfaces switching 命令

此命令用于确定接口上的活动交换路径。有关 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 使用率较高的情况下获取 CPU 分析数据的示例脚本

当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"

相关信息

- 对 Cisco 路由器上的 CPU 使用率过高进行故障排除

- 技术支持和文档 - Cisco Systems