本文解释Exec和虚拟EXEC进程,以及如何排除这些进程中的高CPU利用率故障。
Cisco 建议您在继续阅读本文档之前首先阅读对 Cisco 路由器上的 CPU 使用率过高进行故障排除。
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备创建的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您是在真实网络上操作,请确保您在使用任何命令前已经了解其潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
Cisco IOS.软件中的Exec程序负责路由器在tty线路(控制台、辅助、异步)上的通信。虚拟 Exec 进程负责 vty 线路(Telnet 会话)。
Exec和虚拟EXEC程序是介质优先级程序,因此如果有更高优先级的其他程序(高级或关键级),更高优先级程序将获得CPU资源。
router#show process | i CPU|Exec CPU utilization for five seconds: 0%/0%; one minute: 0%; five minutes: 0% PID QTy PC Runtime (ms) Invoked uSecs Stacks TTY Process 22 M* 0 9644 1733 5564 9732/12000 0 Exec 46 ME 80468980 28 6 466610520/12000 66 Virtual Exec
有关此命令输出的完整解释,请参阅 show processes 命令。
如果通过这些会话传输的数据很多,则 Exec 进程的 CPU 使用率将增加。
这是因为当路由器需要通过这些线路发送一个简单字符时,它会使用一些 CPU 资源:
对于控制台 (Exec),路由器为每个字符使用一个中断。
在 show stacks 命令输出中可以看到控制台中断:
router#show stacks Minimum process stacks: Free/Size Name 11516/12000 Router Init 9404/12000 Init 5520/6000 AIM_MIB_CREATION 5448/6000 RADIUS INITCONFIG 9728/12000 Virtual Exec Interrupt level stacks: Level Called Unused/Size Name 1 23035463 7008/9000 Network interfaces 2 0 9000/9000 Timebase Reference Interrupt 3 0 9000/9000 PA Management Int Handler 6 9791 8892/9000 16552 Con/Aux Interrupt 7 1334963882 8920/9000 MPC860 TIMER INTERRUPT
对于vty线路(虚拟Exec),telnet会话必须构建TCP数据包并将字符发送到telnet客户端。
下面列出了 Exec 进程中 CPU 使用率过高的一些可能原因:
通过控制台端口发送的数据过多。
路由器生成过多控制台消息是一个可能原因。
请查看是否已使用 show debugging 命令在路由器上启动了任何调试。
通过 (no logging console) 禁用路由器的控制台日志记录。
验证在控制台上是否显示了较长的输出(例如 show tech-support 或 show memory)。
Cisco IOS 软件中有一个 Bug。
exec 命令是为异步和辅助线路配置的。
如果线路只有流出数据流,Exec程序应当禁止用于此线路,因为如果连接到此线路的设备(例如,调制解调器)发送一些主动提供的数据,Exec程序则在此线路上开始。
如果路由器用作终端服务器(以便执行到其他设备控制台的反向 Telnet),建议您在连接到其他设备控制台的线路上配置 no exec 命令。否则,从控制台返回的数据可能会启动一个 Exec 进程,该进程将使用 CPU 资源。
下面列出了虚拟 Exec 进程中 CPU 使用率过高的一些可能原因:
Cisco IOS 软件中有软件 Bug。
通过 Telnet 会话发送的数据过多。
执行虚拟 Exec 进程时 CPU 使用率较高的最常见原因是从路由器传输到 Telnet 会话的数据过多。
从Telnet会话执行长输出命令(如show tech-support、show memory等等)时,可能出现这种情况。
通过 show tcp 命令可以验证通过每个 vty 会话传输的数据量:
router#show tcp vty 0
tty66, virtual tty from host 10.48.77.64
Connection state is ESTAB, I/O status: 1, unread input bytes: 1
Local host: 10.48.77.27, Local port: 23
Foreign host: 10.48.77.64, Foreign port: 11006
........
Datagrams (max data segment is 1460 bytes):
Rcvd: 525 (out of order: 0), with data: 53, total data bytes: 87
Sent: 366 (retransmit: 257, fastretransmit: 0), with data: 356, total data bytes:
158187
因为虚拟 Exec 进程,挂起的 Telnet 会话会导致 CPU 使用率过高。要清除挂起的 Telnet 会话,大多数时候需要重新加载设备。清除挂起的 Telnet 会话的另一方式是清除 TCP 进程。通过 show tcp brief 命令可以确认 TCP 进程,如下面输出所示:
Router#show tcp brief TCB Local Address Foreign Address (state) 02FA62D0 172.16.152.75.23 dhcp-171-69-104-.3013 ESTAB
依据以上输出,需要通过 clear tcp tcb 0x02fa62d0 命令清除 TCP 进程 02FA62D0 才能清除挂起的 Telnet 会话。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
12-Dec-2008 |
初始版本 |