此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍思科路由器上CPU使用率较高的常见症状和原因,并提供常见问题的指导原则和解决方案。
Cisco 建议您了解以下主题:
有关 Cisco IOS 软件交换路径的信息,请参阅性能调整基础知识。
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
此列表介绍了 CPU 使用率较高时的常见症状。如果您注意到这些症状中的任何一种,请使用本文档中提供的步骤对问题进行故障排除。
高百分比的 show processes cpu
命令输出.
如果您有思科设备的 show processes cpu 命令输出,可以使用思科 CLI 分析器揭示潜在问题并进行修复。
注意:要使用思科CLI分析器,您必须是注册思科用户,必须登录并启用JavaScript。
性能较低
路由器上的服务无法做出响应,例如:
Telnet 中的响应速度缓慢,或者无法通过 Telnet 连接到路由器
控制台的响应速度缓慢
对 ping 命令做出响应的速度缓慢,或者无响应
路由器不将路由更新发送到其他路由器
缓冲区故障数高
一旦您发现 CPU 使用率高的症状中列出的任何症状,请执行以下操作:
检查是否存在可能的安全问题。通常,CPU 使用率较高是由安全问题(例如网络中运行的蠕虫或病毒)引起的。如果最近没有对网络进行任何更改,则安全问题尤其可能是导致故障的原因。通常,当您向访问列表添加更多行时,配置更改可以减轻此问题的影响。 思科产品安全建议和通知包含有关检测最可能的原因和有关特定解决方法的信息。
有关其他信息,请参阅:
确保使用thor命令 debug
,关闭路由器中的 undebug all
所有命 no debug all
令。
您能否在路由器 show
上发出命令?如果是,请使用以下命令立即开始收集更多 show
信息。
路由器是否不可访问?是否可以再现此问题?如果是,请重新启动路由器,然后在重现问题之前配置命令 scheduler interval 500
。这会将优先级较低的进程调度为每 500 毫秒运行一次,从而可为您提供运行某些命令的时间,即使 CPU 使用率为 100%,也是如此。在Cisco 7200和Cisco 7500系列路由器上,使用命 scheduler allocate 3000 1000
令。
路由器出现 CPU 使用率较高的症状的时间间隔是否较短且无法预测?如果是,请定期收集命令的输出 show processes cpu
,该输出显示高CPU使用率是由中断还是由某个进程引起的。使用此UNIX脚本,并根据您首先找到的内容修改此脚本,以收集进一步调查问题所需的数据。
使用 show processes cpu 命令检查 CPU 使用率较高是由于中断还是由于进程导致的。
有关详细信息,请参阅排除由于中断而导致的 CPU 使用率较高的故障。如果 CPU 使用率的级别上升是由于出现了中断(这些中断可能是由于 CEF 交换数据包而引起的),则 CPU 使用率的级别不会影响路由器性能。
如果为版本7配置了NetFlow,则流由路由处理器执行,这会导致CPU使用率过高。
要对NetFlow版本7导致的CPU使用率过高进行故障排除,请配置 mls nde sender 版本5,因为NetFlow导出由SP执行,这是版本5或版本9的默认设置。
检查哪个进程加载CPU。与进程相关的异常活动将导致日志中记录一条错误消息。因此 show logging exec
,必须首先检查命令输出,查找与消耗大量CPU周期的进程相关的任何错误。
可以使用debug命令对这些进程中的CPU使用率过高进行故障排除。执行debug命令时必须非常谨慎,因为它会进一步提高CPU利用率。为了安全地使用debug命令,必须满足以下必备条件:
必须禁用除缓冲区日志记录之外的所有日志记录目标,或者必须使用适当的命令将其日志记录严重性级别从7(调试)降至6(信息)或更低 logging destination [ severity-level ] configuration
值。要查看启用了哪些日志记录目标和相应级别,请阅读命令的 show logging exec
标题行。
必须增加日志记录缓冲区大小才能捕获足够的信息。有关详细信息,请参阅命令说 logging buffer global configuration
明。
为了能够更好地读取和理解调试,必须启用日期时间和毫秒时间戳。有关详细信息,请参阅命令说 service timestamps global configuration
。
排除因输入进程导致的CPU使用率较高的故障中提供了IP数据包的调试会话示例。
要对特定进程中的CPU使用率过高进行故障排除,请参阅:
ARP输入 — 文档排除由于进程而导致的CPU使用率较高的故障中的ARP输入部分。
BGP路由器 — 排除由BGP扫描程序或BGP路由器进程引起的高CPU故障文档中的“由于BGP路由器进程而导致CPU使用率过高”部分。
BGP 扫描程序 -“排除由于 BGP 扫描程序或 BGP 路由器进程而导致的 CPU 使用率较高的故障”文档中的“由于 BGP 扫描程序而导致 CPU 使用率较高”部分.
EXEC - EXEC和虚拟EXEC进程中的CPU使用率高。
HyBridge Input — 对带ATM接口的路由器上的HyBridge输入进程导致的CPU使用率过高进行故障排除。
IP Input — 由于IP输入进程而导致的CPU使用率过高故障排除。
IP简单网络管理协议(SNMP)- IP简单网络管理协议(SNMP)导致高CPU利用率。
LC ADJ 更新程序 - 在 Cisco 12000 系列 Internet 路由器上执行 LC 邻接关系更新程序进程时导致 CPU 使用率较高的原因是什么?
TCP计时器 — 文档排除由于进程而导致的CPU使用率较高的故障中的TCP计时器部分。
TTY Background — 文档“排除由于进程而导致的CPU使用率较高的故障”的TTY Background部分。
虚拟EXEC — 请参阅EXEC链接。在Exec和虚拟Exec进程的高CPU利用率.
Vtemplate Backgr — 文档排除由于进程而导致的CPU使用率较高的故障中的虚拟模板背景部分。
SSH Process — 如果它捕获或启用调试show tech
,则可能进入高位。
其他进程 — 文档的其他进程部分,排除由于进程而导致的CPU使用率较高的故障。
发现 PCI 和快速内存池的空闲内存不足是正常的。PCI 内存用于为连接到 PRP 主板上 GT64260 控制器的 PCI 总线提供对该控制器的内存访问。此内存用于系统控制器和其他部件之间的内部通信,因此其使用率总是看起来较高。
如果需要更多内存,它将退回到处理器池内存。快速内存是留出来以供硬件接口描述符块 (IDB) 数据结构使用的少量内存。此内存在整个启动过程中也被完全保留,由于它被充分使用,因此其使用率总是显示为较高。由于此原因,发现快速内存池的空闲内存不足是正常的。
CPU hog 消息如下所示:
SNMP-4-HIGHCPU: Process exceeds 200ms threshold (200ms Cisco IOS quantum) for GET of rmon.19.16.0--result rmon.19.16.0
12.4(13)中向Cisco IOS添加了新系统日志消息(HIGHCPU)。如果进程占用 CPU 的时间超过 200 毫秒,则它将报告 HIGHCPU 消息。HIGHCPU 消息对路由器没有影响。它只是告诉您哪一个进程导致 CPU 使用率较高。HIGHCPU 消息类似于 CPUHOG 消息,但与 CPUHOG 消息相比,HIGHCPU 消息的容限阈值低得多,只占前者容限阈值时间量的 1/10,即以毫秒为测量单位。在2600上12.4(13)之前的版本中,进程运行时间更长,但是没有生成消息,因为Cisco IOS版本没有此增强功能。
SNMP PDU 处理(MIB 对象查询)应该在单个 CPU 时间段内执行,以确保 PDU 中的每个对象都像是被同时检索的一样。这是 SNMP 协议标准强加的要求。某些对象是系统中许多数据的聚合,因此,即使它们是单个对象,也会由于对其进行检测的方式而涉及大量处理。如果这些对象未按照 MIB Instrumentation 规则的要求放弃 CPU,则可能会生成此错误消息。另外,如果在同一对象组/表中轮询几个不同的对象,然后收到错误信息,那么其原因通常并非上面所述的原因。
此消息用于确定所用 CPU 时间比预期多(但尚未耗费过多 CPUH)的对象。一些 NMS/检测工具在轮询时表现不佳。此问题记录在思科漏洞ID CSCsl18139中。
注意:只有注册的思科用户才能访问内部工具和漏洞信息。
当设备未安装硬件加密模块时,所有经过加密的流量都必须由软件加密。这会使用非常多的 CPU。对于任何具有合理吞吐量要求的加密部署,建议不要使用软件加密。要解决此问题,一种选择是减少加密流量(重新路由流量或限制加密的流)。但是,解决此问题的最好办法是为此设备安装硬件加密模块,避免使用软件进行加密。
注意:如果在隧道/物理接口上启用加密映射,则会导致内存消耗过程,并可能导致CPU增加。
如果CPU必须重组大量数据包,则重组会使CPU运行率非常高。
要排除由于分段而导致的CPU使用率较高的故障,请在接口上发出tcp mss-adjust 1400命令,该命令设置通过路由器的TCP同步/启动(SYN)数据包的最大分段大小(MSS)值。
这些命令提供有关该问题的详细信息:
show processes cpu
show interfaces
show interfaces switching
show interfaces stat
show ip nat translations
show align
show version
show log
有关show命令的详细信息,请参阅Cisco IOS配置基础命令参考。
如果路由器完全无法访问,请首先对其重新加电。然后,定期收集此部分中命令的输出(命令除外 show log
),该命令的消息必须记录在syslog服务器上。收集输出的间隔必须为五分钟。您可以使用此UNIX shell脚本手动或自动收集数据。您还可以使用HTTP或SNMP收集数据。
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 |
Runtime |
进程已使用的 CPU 时间(毫秒) |
Invoked |
已调用进程的次数 |
uSecs |
每次调用所占用的 CPU 时间(微秒) |
5Sec |
过去五秒内任务的 CPU 使用率 |
1Min |
过去一分钟内任务的 CPU 使用率2 |
5Min |
过去五分钟内任务的 CPU 使用率2 |
TTY |
控制该进程的终端 |
Process |
进程的名称 |
1 进程级 CPU 使用率 = X - Y
2 这些值并非算术平均值,而是以指数方式衰减的平均值。因此,最近的值对计算的平均值具有更多影响。
有关详细信息,请参阅show commands参考指南。
注:CPU总利用率不能用于衡量路由器交换更多数据包的能力。在 Cisco 7500 路由器上,Versatile Interface Processors (VIP) 和路由/交换处理器 (RSP) 不会报告线性的 CPU 使用率。接近每秒数据包交换能力的一半时,CPU 使用率已达到 90% 至 95%。
show interfaces
令此命令用于确定活动接口。
show interfaces switching
令此命令用于确定接口上的活动交换路径。
以下是用于一个接口的命令 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 系列路由器。 |
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 log
令此命令显示缓冲日志消息的内容。
当发生高CPU使用率情况时,可以使用嵌入式事件管理器自动收集数据。 EEM通过监控进程利用率的SNMP OID或监控CPU threshold命令输出的系统日志消息触发。可通过EEM脚本执行各种show命令,并将输出保存到文件系统。
此脚本在进程利用率增加约85%时执行。
有关详细信息,请参阅如何使用SNMP收集Cisco IOS设备上的CPU使用率。
event manager applet high-cpu ! event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3 get-type next entry-op gt entry-val 85 poll-interval 5 exit-time 500 maxrun 600 ! action 0.1 cli command "enable" action 0.2 syslog msg "TAC - Capturing high cpu information to flash:" action 0.3 cli command "term length 0" action 1.1 cli command "show process cpu sorted | redirect flash:eem-cpu1.txt" action 1.2 cli command "show interface | redirect flash:eem-interface1.txt" action 1.3 cli command "show interface stats | redirect flash:eem-stat1.txt" action 1.4 cli command "show ip traffic | redirect flash:eem-traffic1.txt" action 4.1 syslog msg "TAC - Finished logging information to separate eem files in flash" action 9.4 cli command "end" action 9.5 cli command "term default length" ! ! end
EEM和CPU threshold notifications命令的组合可以触发EEM脚本。在本示例中,当利用率在5秒间隔内上升超过85%时,将生成CPURISHINGTHRESHOLD系统日志消息。 EEM脚本可以触发系统日志消息,并执行保存到文件系统上的文件的命令列表。
process cpu threshold type total rising 85 interval 5 ! event manager applet high-cpu event syslog pattern "CPURISINGTHRESHOLD" action 0.1 syslog msg "EEM: HIGH CPU detected. Writing info to flash:eem-log.txt" action 0.2 cli command "enable" action 0.3 cli command "term exec prompt timestamp" action 0.4 cli command "term len 0" action 1.1 cli command "show process cpu sorted | append flash:eem-log.txt" action 1.2 cli command "show proc mem sorted | append flash:eem-log.txt" action 1.3 cli command "show mem alloc total | append flash:eem-log.txt" action 2.2 syslog msg "EEM: Self-removing applet from configuration..." action 2.5 cli command "end" ! end
EEM用于启动/停止CPU分析以及记录来自各种show命令的数据。有关详细信息,请参阅由于中断引起的高CPU使用率故障排除。
event manager applet High_CPU event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.4.1 get-type exact entry-op ge 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 version | append flash:CPU_Profile.txt" 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 0.7 cli command "show region | append flash:CPU_Profile.txt" action 1.2 cli command "profile 4000F000 42C9FFFF 4" 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"
本附录介绍一种定期从路由器捕获数据的简单脚本。脚本的核心是以下一行:
(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 can 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 地址和目标目录。第二个部分包含发送到路由器的实际命令。首先是username,然后是password,依此类推。为了仅捕获某些命令输出的第一行,此命令将包括在内。终端长度设置为较短(在本例中设为 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 &
版本 | 发布日期 | 备注 |
---|---|---|
2.0 |
30-Nov-2022 |
更新的格式。重新认证。 |
1.0 |
14-Dec-2001 |
初始版本 |