目录

简介

先决条件

要求

使用的组件

规则

什么是 Exec 和虚拟 Exec 进程？

Exec 和虚拟 Exec 进程如何能导致 CPU 使用率过高？

对 Exec 进程中 CPU 使用率过高进行故障排除

对虚拟 Exec 进程中 CPU 使用率过高进行故障排除

相关信息

简介

本文解释Exec和虚拟EXEC进程，以及如何排除这些进程中的高CPU利用率故障。

先决条件

要求

Cisco 建议您在继续阅读本文档之前首先阅读对 Cisco 路由器上的 CPU 使用率过高进行故障排除。

使用的组件

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

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

规则

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

什么是 Exec 和虚拟 Exec 进程？

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 和虚拟 Exec 进程如何能导致 CPU 使用率过高？

如果通过这些会话传输的数据很多，则 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 使用率过高进行故障排除

下面列出了 Exec 进程中 CPU 使用率过高的一些可能原因：

- 通过控制台端口发送的数据过多。

路由器生成过多控制台消息是一个可能原因。

1. 请查看是否已使用 show debugging 命令在路由器上启动了任何调试。

2. 通过 (no logging console) 禁用路由器的控制台日志记录。

3. 验证在控制台上是否显示了较长的输出（例如 show tech-support 或 show memory）。

- Cisco IOS 软件中有一个 Bug。

使用 Bug 工具包（仅限注册客户）在您的 Cisco IOS 软件版本中寻找有此症状的 Bug。

- exec 命令是为异步和辅助线路配置的。

- 如果线路只有流出数据流，Exec程序应当禁止用于此线路，因为如果连接到此线路的设备(例如，调制解调器)发送一些主动提供的数据，Exec程序则在此线路上开始。

- 如果路由器用作终端服务器（以便执行到其他设备控制台的反向 Telnet），建议您在连接到其他设备控制台的线路上配置 no exec 命令。否则，从控制台返回的数据可能会启动一个 Exec 进程，该进程将使用 CPU 资源。

对虚拟 Exec 进程中 CPU 使用率过高进行故障排除

下面列出了虚拟 Exec 进程中 CPU 使用率过高的一些可能原因：

- Cisco IOS 软件中有软件 Bug。

使用 Bug 工具包（仅限注册客户）在您的 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 会话。

相关信息

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

- 技术支持 - Cisco Systems