TS CISCO Router High CPU
1、High CPU的相关症状
如下描述了关于High CPU的共同症状,如果发现有这些症状,那么可以通过后续的排障步骤去尝试减轻问题。
①show processes cpu输出有高占用的比例的情况
②设备性能慢
③设备的相关服务无法响应,例如:
Telnet比较慢或者不能Telnet;
Console比较卡顿,比较慢;
ping请求反应慢,或者不能响应;
设备不发送路由更新给其他设备;
④高缓冲失败
2、排障初始阶段
一旦你注意到任任何CPU高利用率的情况,那么可以检查可能的安全问题,通常情况下,高CPU利用率是由安全问题引起的,例如在网络中运行的蠕虫或病毒。 如果最近没有对网络进行更改,这可能是最主要的原因。 通常,配置更改(例如向访问列表添加更多行)可以减轻此问题的影响。 思科产品安全通报和通知包含有关检测最可能的原因和特定解决方法的信息。
①确认关闭了debug命令(un all / no debug all)
②确认是否可以使用show命令,如果可以的话,立即收集相关信息。
③设备不能访问的情况,问题是否可以重现,如果可以,重启路由器设备,并且在问题重现之前,配置一个500ms间隔的调度命令,这将安排低优先级进程每500ms运行一次,即使CPU使用率达到100%,也可以让您运行一些命令。在Cisco 7200和Cisco 7500系列路由器上,使用调度程序分配3000 1000ms的命令调度间隔。
④若是路由器在短暂和不可预知的时间间隔内显示CPU利用率高的症状,则周期性地收集show processes cpu命令的输出,该命令显示高CPU利用率是由中断引起的还是由特定进程引起的。
3、确定原因并解决问题
通过show processes cpu 命令去确认CPU利用率是中断高还是进程高。
①由于中断引起的High CPU,若由于CEF交换数据包造成的中断导致High CPU,不会影响路由器的性能。
中断造成的High CPU可能的原因:中断级别的高CPU使用率主要是由中断级别的数据包处理引起的。 任何时候从Console口或路由器的AUX端口输出字符都会产生中断。通用异步接收器/发送器(UART,Universal Asynchronous Receiver/Transmitters)与路由器的处理速度相比较慢,所以不太可能控制台或辅助中断会导致路由器的CPU利用率较高(除非路由器具有大量的 tty线路在使用)。
中断造成CPU利用率高的原因有几个:
路由器上配置了不适当的切换/交换路径;
CPU正在执行对齐校正;
路由器负载过重;
路由器上运行的Cisco IOS®软件存在Bug;
语音端口被配置在路由器上;
路由器上有Active的异步传输模式(ATM,Asynchronous Transfer Mode)接口;
从并行快速转发(PXF,Parallel Express Forwarding)向路由处理器(RP,Route Processor )分配太多数据包;
#不适当的交换路径#
要解决此潜在问题,请验证以下内容:
@检查路由器是否运行Cisco Express转发:
-验证ip cef全局配置命令
-验证cef被开启并运行(show ip cef summary)
-验证cef在所有接口上开启(show cef interface/show ip interface)如果配置了cef,但是没有在接口上开启,那认为接口封装不支持cef,验证cef操作,即检查是否包真的切换通过路由器使用cef通过命令(show cef not-cef-switched)
-使用show cef drop命令和show interface switching验证cef是否有丢包,
@验证是否有任意接口配置了长访问列表:
一般来说,任何超过十行的访问列表都被认为是很长的。反复查看长访问列表非常耗费CPU资源。 当使用NetFlow switching,如果数据流已经在缓存中,则不再需要检查访问列表。 所以在这种情况下,NetFlow switching将是有用的。 您可以通过发出ip route-cache flow命令启用NetFlow交换。
请注意,如果cef和NetFlow都在接口上配置,则cef将用于做出交换决定。
@验证路由器上是否配置了NetFlow switching:
通过发出show ip cache flow命令检查统计信息,看每秒新流量的数量。
如果cef未启用,请启用cef以加快交换决策。
如果没有长访问列表,请尝试禁用NetFlow switching。
#CPU执行校准更正#
对齐错误是由未对齐的读取和写入引起的。 例如,其中内存地址不是偶数倍的两个字节的双字节读取是一个对齐错误。
对齐错误通常是由软件Bug引起。 CPU纠正了这个错误,但是如果有很多更正的话,这会变成CPU-intensive(密集型的),这样导致CPU High。
#路由器超出负载#
show interfaces和show interface switching 可以查看接口是否负载过重,为了抓取相关信息以供分析,可以执行如下操作:
-terminal length 0
R1#terminal length ?
<0-512> Number of lines on screen (0 for no pausing)
-检查show intefaces输出信息,检查接口上的load和throttles的数量,负载默认情况下是五分钟的一个平均值,要更改此时间间隔,请发出load-interval seconds命令,其中seconds表示数据用于计算负载统计信息的时间长度。 使用值为30的倍数。
R1(config-if)#load-interval ?
<30-600> Load interval delay in seconds
Throttles是说明一个路由器过载的标志现象。它显示了端口上的接收器被禁用的次数,可能是由于缓冲器(buffer)或处理器(Processor)过载。加上中断级别高的CPU利用率,Throttle就表示这个路由器负载过重。
检查show interfaces switching 命令的输出,以查看正在经过负载过重接口的通信量(协议和交换路径)。 如果某些接口的流量过载,请考虑重新设计网络中的流量或升级硬件。
网络环路也可能是流量超载的原因。 那需要验证网络拓扑。
如果单个设备可能以极高的速率生成数据包,从而导致路由器过载,则可以通过添加ip accounting mac-address {input | output} interface配置命令到过载接口来确定该设备的MAC地址。
R1(config-if)#ip accounting mac-address ?
input Source MAC address on received packets
output Destination MAC address on transmitted packets
通过show interfaces [] mac-accounting命令显示收集的信息。 一旦找到源设备的MAC地址,就可以通过检查show ip arp命令的输出来找到相应的IP地址。
R1#show interfaces e0/0 mac-accounting
Ethernet0/0
Input (512 free)
Total: 0 packets, 0 bytes
Output (512 free)
Total: 0 packets, 0 bytes
#软件Bug#
可以通过思科官网的Bug工具搜索相关匹配的Bug
#路由器上配置了Voice Ports#
即使没有流量,软件也会继续监视使用CPU资源的通道协商信令(CAS)。
#路由器上存在活跃的ATM接口#
即使没有流量,ATM接口也会发送空单元(按照ATM标准),并继续使用CPU资源。
#从PXF分配过多的数据到RP#
当PXF向RP发送过多的数据包时,RP可能会过载。 您可以通过发出show pxf accounting summary命令来比较被踢到RP的数据包的量与传入数据包的总量。 使用相同的命令找出为什么数据包被踢到RP。 这可能是一个软件Bug,或者PXF不支持该类流量。
#CPU分析#
CPU分析是确定CPU花费在哪里的低成本方式。 系统通过每四毫秒对处理器位置进行采样来工作。 内存中该位置的计数增加。 此CPU利用率的根本原因将由CPU分析确定。
完成这些步骤如下步骤以执行CPU分析。 当你经历CPU使用率很高时,CPU利用率已经完成了。
注意:所有的这些命令都需要在特权模式下实现。
show region >>>>>获取tarting address, the ending address and the size of main:text region
show memory statistics >>>>>检查处理器内存中最大的块的大小。
profile task interrupt (隐藏命令)>>>>>仅配置中断的配置文件。
比较main:text区域的大小和空闲处理器largest block的大小。 理想情况下,largest block应该比main:text大。
如果largest block比main:text小的话,然后调整粒度以确保分析将能够获得一块处理器内存。
如果largest block比main:text大的话,使用粒度4.
如果largest block比main:text大一半的话,使用粒度8.
如果largest block比main:text大四分之一的话,使用粒度10 (16 in hexadecimal)
注意:粒度必须是2的幂,并应尽可能小(但不能小于4)
通过执行配置文件开始分析
Profile <starting address> <ending address> <granularity value>
起始地址和结束地址由Step1确定。
等待5到10分钟
停止配置文件通过profile stop
捕获显示配置文件通过show profile terse
确保所有内存都被释放unprofile all
@show interfaces switching命令
该命令用于确定接口上的主用交换路径。
例如:
R1#sho interfaces switching
Ethernet0/0
Throttle count 0
Drops RP 0 SP 0
SPD Flushes Fast 0 SSE 0
SPD Aggress Fast 0
SPD Priority Inputs 3 Drops 0
Protocol IP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 1004 114456 1004 114456
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0
Protocol DEC MOP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 17 1309 17 1309
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0
Protocol ARP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 3 180 3 180
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0
Protocol CDP
Switching path Pkts In Chars In Pkts Out Chars Out
Process 176 59312 176 59312
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0
Protocol Other
Switching path Pkts In Chars In Pkts Out Chars Out
Process 0 0 1041 62460
Cache misses 0 - - -
Fast 0 0 0 0
Auton/SSE 0 0 0 0
NOTE: all counts are cumulative and reset only after a reload.
Interface Ethernet0/1 is disabled
Interface Ethernet0/2 is disabled
Interface Ethernet0/3 is disabled
输出列出了接口上配置的所有协议的交换路径,因此您可以轻松地看到路由器通过什么类型和数量的流量。 下表解释了输出字段:
4、当在CISCO 7600 Series Router上开启Netflow NDE时High CPU
如果NetFlow配置为版本7,则流量由路由处理器执行,这可能会导致高CPU使用率。
要排除由于Netflow版本7而导致的高CPU使用率故障,请配置mls nde sender版本5,因为Netflow导出由SP(默认版本5或版本9)执行。
5、进程导致的High CPU
检查哪个进程正在加载CPU。与进程相关的异常活动会在日志中产生错误消息。因此,应首先检查show logging的输出,以确定与耗费大量CPU周期的进程相关的任何错误。
debug也可以帮助解决进程中CPU利用率高的问题。不过,应该非常小心的进行调试,因为它可能会提高CPU利用率。为了使debug安全有用,应该满足这些先决条件:
除缓冲区日志记录以外的所有日志记录目标都应该禁用,或者使用相应的logging destination [severity-level]配置命令将其日志严重性级别从7(调试)降至6(信息)或更低。
为了捕获足够的信息,应该增加记录缓冲区的大小(buffer size)
为了能够更好地阅读和理解debug,应该启用datetime和millisecond时间戳。
要排除特定进程中较高的CPU利用率,请参阅相应的链接:
ARP Input—ARP Input section of the document Troubleshooting High CPU Utilization Due to Processes
BGP Router—High CPU due to BGP Router Process section of the document Troubleshooting High CPU Caused by the BGP Scanner or BGP Router Process
BGP Scanner—High CPU due to BGP Scanner section of the document Troubleshooting High CPU Caused by the BGP Scanner or BGP Router Process
EXEC—High CPU Utilization in the EXEC and Virtual EXEC Processes
HyBridge Input—Troubleshooting High CPU Utilization Caused by the HyBridge Input Process on Routers With ATM Interfaces
IP Input—Troubleshooting High CPU Utilization Due to the IP Input Process
IP Simple Network Management Protocol (SNMP)—IP Simple Network Management Protocol (SNMP) Causes High CPU Utilization
LC ADJ Updater—What Causes High CPU Utilization in the LC Adjacency Updater Process on a Cisco 12000 Series Internet Router?
TCP Timer—TCP Timer section of the document Troubleshooting High CPU Utilization due to Processes
TTY Background—TTY Background section of the document Troubleshooting High CPU Utilization due to Processes
Virtual EXEC—High CPU Utilization in Exec and Virtual Exec Processes
Vtemplate Backgr—Virtual Template Background section of the document Troubleshooting High CPU Utilization due to Processes
SSH Process— Might go high if capturing a show tech or some debug is enabled.
Other processes—Other Processes section of the document Troubleshooting High CPU Utilization due to Processes
6、软件加密导致的High CPU
当设备中没有安装硬件加密模块时,所有通过设备的加密流量都必须由软件加密。 这是非常密集的CPU。 不建议对具有合理吞吐量要求的任何加密部署使用软件加密。 解决此问题的一个选项是减少加密流量(重新路由流量或限制加密的流量)。 但是,解决此问题的最佳方法是为此设备安装硬件加密模块,从而消除了通过软件进行加密的需要。
注意:启用隧道/物理接口上的加密映射是一个内存消耗过程,可能会导致CPU的增加。
7、由于分片/碎片的导致的High CPU
如果CPU需要重新组装大量的数据包,重新组装可以使CPU运转得非常高。
要排除因碎片导致的高CPU占用率,请在接口上发出tcp mss-adjust 1400命令,该命令设置通过路由器的TCP同步/启动(SYN)数据包的最大段大小(MSS)值。
8、获取更多信息的命令
如下命令可以为问题提供更多的信息供分析:
show processes cpu
show interfaces
show interfaces switching >>>>>determining active switching paths on interfaces
show interfaces stat >>>>>is a summarized version of the show interfaces switching command
show ip nat translations >>>>>displays the Network Address Translation (NAT) translations active on the router
show align >>>>> only on reduced instruction set computing (RISC) processor-based platforms
show version >>>>> Cisco IOS Software version, platform, CPU type, and the uptime of the router.
show log >>>>>more information about logging system messages
对于show ip nat translations,每个活动NAT都会产生CPU中断,并影响路由器的总CPU利用率。 大量的NAT可能会对路由器产生性能影响。
如果路由器完全无法访问,请首先重新启动路由器。 然后,定期收集本节中除了show log(show log 应该在syslog server上)命令的输出。
#show process cpu#
CPU utilization for five seconds: X%/Y%; one minute: Z%; five minutes: W% PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
注意:总CPU利用率不应该用来衡量路由器交换更多数据包的能力。 在Cisco 7500路由器上,多功能接口处理器(VIP,Versatile Interface Processors)和路由/交换处理器(RSP,Route/Switch Processors)不报告线性CPU利用率。 接近一半每秒切换数据包的功率来自90%到95%的CPU利用率。
原话如下:
Note: Total CPU utilization should not be used as a measure of the ability of the router to switch more packets. On Cisco 7500 routers, Versatile Interface Processors (VIPs) and Route/Switch Processors (RSPs) do not report linear CPU utilization. Close to half of the switching packet-per-second power comes after 90 to 95 percent CPU utilization.
相关原文链接:
https://www.cisco.com/c/en/us/support/docs/routers/10000-series-routers/15095-highcpu.html?referring_site=bodynav#show_process_cpu
转载于:https://blog.51cto.com/momentsli/2063407