Cisco经典文档

当前位置: 首页Cisco经典文档对 Cisco 路由器上的 CPU 使用率过高进行故障排除


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

            

 

                                                       文档下载:

切换至英文原版


内容

前言
前提条件
      需求
      使用的组件
      惯例
CPU 使用率较高时的症状
初始故障排除
确定原因并解决问题
      由于中断而导致 CPU 使用率较高
      高CPU,当启用在Cisco 7600系列路由器时的NetFlow NDE
      由于进程而导致 CPU 使用率较高
      PCI 和快速内存池显示非常高的使用率
      %SNMP-4-HIGHCPU : Process exceeds [dec]ms threshold ([dec]ms IOS quantum) for [chars] of [chars]--result [chars]
      高CPU由于软件加密
用于获取详细信息的命令
      show processes cpu 命令
      show interfaces 命令
      show interfaces switching 命令
      show interfaces stat 命令
      show ip nat translations
      show align 命令
      show version 命令
      show log 命令
用于定期收集数据的 UNIX Shell 脚本
 


前言

本文档介绍了 Cisco 路由器上的 CPU 使用率较高的常见原因和症状,并提供了故障排除指导原则和解决方案。

前提条件

需求

故障排除在Cisco路由器的高CPU利用率要求对Cisco IOS软件交换路径的® 了解。 有关 Cisco IOS 软件交换路径的信息,请参阅性能调整基础知识

使用的组件

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

惯例

有关文档规则的详细信息,请参阅 Cisco 技术提示规则

CPU 使用率较高时的症状

此列表介绍了 CPU 使用率较高时的常见症状。 如果您注意到其中的任何一种症状,请按照本文档中的故障排除步骤解决问题。

  • show processes cpu 命令输出中的百分比较高

    如果您拥有来自Cisco设备的show processes cpu命令输出,则可以使用它显示潜在的问题,并进行修复。 Output Interpreter 要使用,您必须是注册用户,并且必须进行登录,还要激活 JavaScript。 Output Interpreter

  • 性能较低

  • 路由器上的服务无法做出响应,例如:

    • Telnet 中的响应速度缓慢,或者无法通过 Telnet 连接到路由器

    • 控制台的响应速度缓慢

    • 对 ping 命令做出响应的速度缓慢,或者无响应

    • 路由器不将路由更新发送到其他路由器

初始故障排除

一旦注意到以上任何一个症状,请执行以下操作:

确定原因并解决问题

使用 show processes cpu 命令检查 CPU 使用率较高是由于中断还是由于进程导致的。

由于中断而导致 CPU 使用率较高

有关详细信息,请参阅排除由于中断而导致的 CPU 使用率较高的故障。 如果 CPU 使用率的级别上升是由于出现了中断(这些中断可能是由于 CEF 交换数据包而引起的),则 CPU 使用率的级别不会影响路由器性能。

高CPU,当启用在Cisco 7600系列路由器时的NetFlow NDE

如果NetFlow为版本7配置,流由路由处理器进行,可能导致高CPU利用率。

对于故障排除高CPU利用率由于NetFlow版本7,请配置mls nde发送方版本5, NetFlow Export由SP执行,是版本5或版本9的默认值。

由于进程而导致 CPU 使用率较高

请检查哪一个进程正在向 CPU 进行加载。 与进程相关的异常活动将导致日志中记录一条错误消息。 因此,应该首先检查 show logging exec 命令的输出中是否存在任何与占用大量 CPU 周期的进程有关的错误。

对于排除在执行进程时 CPU 使用率较高的故障,调试可能也很有帮助。 然而,由于调试可能导致 CPU 使用率更高,因此,执行调试时应该非常小心。 为了使调试安全且有用,应该满足以下前提条件:

  • 应禁用除了缓冲区日志记录以外的所有日志记录目标,或者应使用相应的 logging destination [severity-level] 配置命令将它们的日志记录严重级别从 7(调试)降至 6(信息)或更低级别。 要查看已启用了哪些日志记录目标和相应的级别,请阅读 show logging exec 命令输出的标题行。

  • 应该增加日志记录缓冲区大小以捕获充足的信息。 有关详细信息,请参阅 logging buffered 全局配置命令的说明。

  • 为了能够更好地查看和了解调试,应该启用日期时间和毫秒时间戳。 有关详细信息,请参阅 service timestamps 全局配置命令的说明。

排除在执行 IP 输入进程时 CPU 使用率较高的故障中提供了 IP 数据包的示例调试会话。

有关如何排除在执行特定进程时 CPU 使用率较高的故障,请访问以下相应链接:

  • ARP 输入 -“排除由于进程而导致的 CPU 使用率较高的故障”文档中的“ARP 输入”部分

  • BGP 路由器 -“排除由于 BGP 扫描程序或 BGP 路由器进程而导致的 CPU 使用率较高的故障”文档中的“由于 BGP 路由器进程而导致 CPU 使用率较高”部分

  • BGP 扫描程序 -“排除由于 BGP 扫描程序或 BGP 路由器进程而导致的 CPU 使用率较高的故障”文档中的“由于 BGP 扫描程序而导致 CPU 使用率较高”部分

  • EXEC - 在执行 EXEC 和虚拟 EXEC 进程时 CPU 使用率较高

  • HyBridge 输入 - 在带有 ATM 接口的路由器上排除由于 HyBridge 输入进程而导致的 CPU 使用率较高的故障

  • IP 输入 - 排除由于 IP 输入进程而导致的 CPU 使用率较高的故障

  • IP 简单网络管理协议 (SNMP) - IP 简单网络管理协议 (SNMP) 导致 CPU 使用率较高

  • LC ADJ 更新程序 - 在 Cisco 12000 系列 Internet 路由器上执行 LC 邻接关系更新程序进程时导致 CPU 使用率较高的原因是什么?

  • TCP 计时器 -“排除由于进程而导致的 CPU 使用率较高的故障”文档中的“TCP 计时器”部分

  • TTY 后台 -“排除由于进程而导致的 CPU 使用率较高的故障”文档中的“TTY 后台”部分

  • 虚拟 EXEC - 在执行 Exec 和虚拟 Exec 进程时 CPU 使用率较高

  • Vtemplate Backgr -“排除由于进程而导致的 CPU 使用率较高的故障”文档中的“虚拟模板后台”部分

  • 其他进程 -“排除由于进程而导致的 CPU 使用率较高的故障”文档中的“其他进程”部分

PCI 和快速内存池显示非常高的使用率

发现 PCI 和快速内存池的空闲内存不足是正常的。 PCI 内存用于为连接到 PRP 主板上 GT64260 控制器的 PCI 总线提供对该控制器的内存访问。 此内存用于系统控制器和其他部件之间的内部通信,因此其使用率总是看起来较高。

如果需要更多内存,它将退回到处理器池内存。 快速内存是留出来以供硬件接口描述符块 (IDB) 数据结构使用的少量内存。 此内存在整个启动过程中也被完全保留,由于它被充分使用,因此其使用率总是显示为较高。 由于此原因,发现快速内存池的空闲内存不足是正常的。

%SNMP-4-HIGHCPU : Process exceeds [dec]ms threshold ([dec]ms IOS quantum) for [chars] of [chars]--result [chars]

CPU hog 消息如下所示:

SNMP-4-HIGHCPU: Process exceeds 200ms threshold (200ms IOS quantum)
for GET of rmon.19.16.0--result rmon.19.16.0

一条新的 syslog 消息 (HIGHCPU) 已添加到 12.4(13) 版本的 IOS 中。 如果进程占用 CPU 的时间超过 200 毫秒,则它将报告 HIGHCPU 消息。 HIGHCPU 消息对路由器没有影响。 它只是告诉您哪一个进程导致 CPU 使用率较高。 HIGHCPU 消息类似于 CPUHOG 消息,但与 CPUHOG 消息相比,HIGHCPU 消息的容限阈值低得多,只占前者容限阈值时间量的 1/10,即以毫秒为测量单位。 在 2600 上运行的 12.4(13) 之前的版本中,由于 IOS 版本没有此增强功能,进程运行了较长时间也不会生成消息。

SNMP PDU 处理(MIB 对象查询)应该在单个 CPU 时间段内执行,以确保 PDU 中的每个对象都像是被同时检索的一样。 这是 SNMP 协议标准强加的要求。 某些对象是系统中许多数据的聚合,因此,即使它们是单个对象,也会由于对其进行检测的方式而涉及大量处理。 如果这些对象未按照 MIB Instrumentation 规则的要求放弃 CPU,则可能会生成此错误消息。 另外,如果在同一对象组/表中轮询几个不同的对象,然后收到错误信息,那么其原因通常并非上面所述的原因。

总之,此消息用于识别使用的 CPU 时间多于预期时间(但仍然不是 CPUHOG)的对象。 一些 NMS/检测工具在轮询时表现不佳。 CSCsl18139仅限注册用户)中记录了该问题。

高CPU由于软件加密

当没有在设备安装的硬件加密模块,然后来通过设备的所有加密流量将必须由软件加密。 这非常强化中央处理。 它不是推荐使用任何加密部署的软件加密与一个合理的吞吐量需求。 一个选项解决此问题是减少运输量加密流量(请重路由流量或限制加密)的流。 然而,解决此发货的最佳方法是获得硬件加密模块安装为排除需要对于加密发生通过软件的此设备。

用于获取详细信息的命令

这些命令提供有关该问题的详细信息:

如果路由器完全无法访问,请首先对其重新加电。 然后,定期收集以上命令(show log 命令除外,其消息应记录在 syslog 服务器上)的输出。 用于收集输出的时间间隔应为五分钟。 可以使用此 UNIX shell 脚本手动或自动收集数据。 也可以使用 HTTP 或 SNMP 收集数据。 有关在 Cisco 路由器上配置 HTTP 和 SNMP 的详细信息,请参阅 Cisco IOS 软件配置文档。

show processes cpu 命令

这是 show processes cpu 命令输出标题的示例:

 CPU utilization for five seconds: X%/Y%; one minute: Z%; five minutes: W% 
  PID  Runtime(ms)  Invoked  uSecs    5Sec   1Min   5Min TTY Process 

下表说明了标题中的字段:

字段

说明

x

过去五秒内的平均总使用率(中断 + 进程)

Y

过去五秒内由于中断导致的平均使用率1

Z

过去一分钟内的平均总使用率2

W

过去五分钟内的平均总使用率2

PID

进程 ID

运行时间

进程已使用的 CPU 时间(毫秒)

调用

已调用进程的次数

uSecs

每次调用所占用的 CPU 时间(微秒)

5sec

过去五秒内任务的 CPU 使用率

1Min

过去一分钟内任务的 CPU 使用率2

5Min

过去五分钟内任务的 CPU 使用率2

TTY

控制该进程的终端

进程

进程的名称

 

 

1进程级别上的 CPU 使用率 = X - Y

2这些值不表示算术平均值,而表示指数衰減平均值。 因此,最近的值对计算的平均值具有更多影响。

有关 show processes cpu 命令的详细说明,请访问此链接。

注意: 不应将 CPU 总使用率用作一种度量路由器是否可以交换更多数据包的方法。 在 Cisco 7500 路由器上,Versatile Interface Processors (VIP) 和路由/交换处理器 (RSP) 不会报告线性的 CPU 使用率。 接近每秒数据包交换能力的一半时,CPU 使用率已达到 90% 至 95%。

show interfaces 命令

命令参考包含 show interfaces 命令的详细说明。

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 

该输出列出了此接口上配置的所有协议的交换路径,因此您可以很方便地查看经过路由器的数据流的类型和流量。 下表介绍了输出字段。

字段

定义

进程

处理的数据包。 这些数据包可能是发往路由器的数据包,或者是快速交换缓存中没有其条目的数据包。

Cache misses

快速交换缓存中没有其条目的数据包。 发往此目的地的第一个数据包(或数据流,具体取决于所配置的快速交换类型)将被处理。 所有后续数据包将进行快速交换,除非传出接口上已明确禁用快速交换。

快速

快速交换的数据包。 默认情况下,快速交换处于启用状态。

Auton/SSE

自主交换数据包、硅交换数据包或分布式交换数据包。 只能用于带有交换处理器或硅交换处理器(分别用于自主交换或硅交换)的 Cisco 7000 系列路由器,或者用于带有 VIP(用于分布式交换)的 Cisco 7500 系列路由器。

 

 

show interfaces stat 命令

此命令是 show interfaces switching 命令的摘要版本。 下面是针对一个接口的示例输出:

 RouterA#show interfaces stat
 Ethernet0 
           Switching path    Pkts In   Chars In   Pkts Out  Chars Out 
                Processor      52077   12245489      24646    3170041 
              Route cache          0          0          0          0 
        Distributed cache          0          0          0          0 
                    Total      52077   12245489      24646    3170041 

show interfaces stat 命令的输出因平台而异,具体取决于可用的、已配置的交换路径

show ip nat translations

show ip nat translations 命令显示路由器上处于活动状态的“网络地址转换 (NAT)”转换。 每个活动转换都会产生 CPU 中断,并会对路由器的总 CPU 使用率产生影响。 数量非常庞大的转换可能会对路由器的性能产生影响。

下面是 show ip nat translations 命令的示例输出:

     router#show ip nat translations
     Pro Inside global    Inside local    Outside local    Outside global
     --- 172.16.131.1     10.10.10.1      ---              ---

show align 命令

只有在基于精简指令集计算 (RISC) 处理器的平台上才能使用此命令。 在这些平台上,CPU 可以对未对齐的内存读/写进行更正。 下面是部分示例输出:

 Alignment data for: 
 4500 Software (C4500-DS40-M), Version mis-aligned RELEASE SOFTWARE (fc1) 
 Compiled Tue 31-Mar-98 15:05 by jdoe

 Total Corrections 33911, Recorded 2, Reads 33911, Writes 0 

 Initial Initial 
 Address Count Access Type Traceback 
 40025F4D 15561 16bit read 0x606F4A7C 0x601C78F8 0x6012FE94 0x600102C0 
 40025F72 18350 32bit read 0x606FB260 0x6013113C 0x600102C0 0x60010988 

show version 命令

对于跟踪高 CPU 使用率问题而言,此命令输出的重要部分是 Cisco IOS 软件版本、平台、CPU 类型和路由器的正常运行时间。 命令参考提供了 show version 命令的详细说明。

show log 命令

此命令显示缓冲日志消息的内容。 有关记录系统消息的详细信息,请参阅路由器配置故障排除指南中的记录系统错误消息部分。

用于定期收集数据的 UNIX Shell 脚本

此附录介绍了一个用于从路由器定期捕获数据的简单脚本。 脚本的核心是以下一行:

  (echo "show version") | telnet 192.168.1.1

括号中的命令在子 shell 中执行,输出将发送到 Telnet 会话。 这是一个用于捕获 show version 命令输出和 show processes cpu 命令输出的示例脚本:

     #!/opt/local/bin/bash

     ########################################### 
     # Router's IP address 
     # 
     IP_ADDRESS='10.200.40.53' 
       

     # Directory where the log files will be stored 
     # 
     DIR=/var/log/router 

     ######################################## 

     if [ ! -e $DIR ] 
     then 
       mkdir $DIR 
     fi 

     # Tag specification: mmddhhmm 
     DATE=`date +'%m%d'` 
     TIME=`date +'%H%M'` 
     TAG=$DATE$TIME 

     # Collect data from the router 
     (echo "foo";\ 
     echo "bar";\ 
     echo "term len 0";\ 
     echo "show version";\ 
     echo "show processes cpu";\ 
     echo "term len 15";\ 
     echo "show memory summary";\ 
     echo "q";\ 
     sleep 30)|telnet $IP_ADDRESS > $DIR/info.$TAG 2>$DIR/info.$TAG.msg 

注意: 在此脚本中,包括口令在内的所有数据均以明文格式发送。

在第一个部分中,您需要为日志文件指定 IP 地址和目标目录。 第二个部分包含发送到路由器的实际命令。 首先是用户名,然后是口令,等等。 还包括了一个技巧,用于仅捕获特定命令输出的前几行。 终端长度设置为较短(在本例中设为 15 行),并且“q”字符只在提示时发送。

如果数据是定期收集的,那么 show version 的输出显示问题是否具有周期性,例如,问题是否总是在每天的特定时间或每周特定的星期几出现。 如果需要收集更多命令的输出,可以采用上述示例所示的相同方式将命令添加到脚本中。 如果需要截断发送到文件的命令输出,则首先需要延长休眠周期(休眠命令在括号中)。

如果 CPU 使用率较高的问题经常出现,但持续时间不长,请每五分钟运行该脚本一次。 否则,可以每 15 或 30 分钟运行它一次。 为了便于使用,请将该脚本保存在文件(例如 /usr/bin/router-script)中。 然后,若要每五分钟运行该脚本一次,请向 /etc/crontab 文件添加以下行:

     */5       *       *       *       *       /usr/bin/router-script

重新启动 cron 服务器。 如果您无权更改 /etc/crontab 文件,请在单独的进程中运行该脚本,如下所示:

     while [ 1 ]; do ./router-script ; sleep 300; done &

 

 

注:本人能力有限,如遇不足之处,还请指正!

China-CCIE  QQ交流群:106155045   点击与作者QQ交谈