目录

简介

先决条件

要求

使用的组件

规则

SNMP引擎进程导致的CPU使用率过高

被 NMS 工作站轮询的巨大的路由和/或 ARP 表

轮询某些 MIB

相关信息

相关的思科支持社区讨论

简介

本文档说明如何排除由于路由器（尤其是低端路由器）中运行的SNMP引擎进程而导致的路由器中CPU使用率过高的故障。

先决条件

要求

本文档的读者应掌握以下这些主题的相关知识：

- SNMP

- Cisco IOS

使用的组件

本文档中的信息基于运行Cisco IOS®软件的路由器。

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

规则

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

SNMP引擎进程导致的CPU使用率过高

有时，路由器控制台中可能会显示以下消息：

%SNMP-3-CPUHOG: Processing [chars] of [chars]

这意味着设备上的SNMP代理处理请求所花的时间过长。

您可以使用show process cpu命令的输出确定路由器中CPU使用率高的原因。

以下示例显示show process cpu命令的输出。

cacuk#show process cpu

CPU utilization for five seconds: 0%/0%;

one minute: 0%;

five minutes: 0%

PID

Runtime (ms)

Invoked

uSecs

5Sec

1Min

5Min

TTY

Process

1

68

258816

0

0.00%

0.00%

0.00%

0

Load Meter

2

0

1

0

0.00%

0.00%

0.00%

0

OSPF Hello

3

788132

131480

5994

0.00%

0.00%

0.00%

0

Check heaps

4

0

1

0

0.00%

0.00%

0.00%

0

区块管理器

5

56

131

427

0.00%

0.00%

0.00%

0

Pool Manager

69

202700

421730

480

0.00%

0.01%

0.00%

0

IP SNMP

71

1193648

211250

5650

0.00%

0.19%

0.15%

0

SNMP引擎

debug snmp 命令检查当时正在查询哪些对象ID(OID)或管理信息库(MIB)。

注意：在生产网络上运行调试可能会使路由器不堪重负。

与简单网络管理协议(SNMP)相关，CPU使用率较高的可能原因有两种：

1. 由NMS站轮询的大型路由和/或ARP表

2. 轮询某些 MIB

被 NMS 工作站轮询的巨大的路由和/或 ARP 表

网络管理站查询路由器的整个路由表以了解其他网络。它使用此信息查找其他路由器，并查询它们对周围网络的了解。这样，管理站就可以获知整个网络的拓扑。

路由器以散列格式存储路由表，更有利于快速路由搜索。但是，根据RFC1213，路由的SNMP响应需要按字典顺序返回。因此，对于路由器收到的每个SNMP请求，必须以字典顺序对哈希表进行排序，然后才能构建SNMP响应PDU。路由表越大，排序的CPU占用越多。

对于CPU调度程序而言，SNMP是低优先级进程，因此需要CPU资源的另一个进程会优先处理。因此，当此场景中出现CPU峰值时，它们不应影响性能。

建议1:使用snmp-server view命令

为避免性能问题，强制路由器提前结束从网络管理系统服务器查询路由表的过程。配置路由器，使其在收到路由表请求的开始时立即使用完整消息做出响应，如下所示：

snmp-server view cutdown iso included

!--- ISO is used as a starting point as it is the snmp 'root'.

snmp-server view cutdown 1.3.6.1.2.1.4.21 excluded

snmp-server view cutdown 1.3.6.1.2.1.4.22 excluded

snmp-server view cutdown 1.3.6.1.2.1.3 excluded

snmp-server view cutdown 1.3.6.1.6.3.15 excluded

!--- The additional object snmpUsmMIB is excluded.

snmp-server view cutdown 1.3.6.1.6.3.16 excluded

!--- The additional object snmpVacmMIB is excluded.

snmp-server view cutdown 1.3.6.1.6.3.18 excluded

!--- The additional object snmpCommunityMIB is excluded.

snmp-server community public view cutdown RO

snmp-server community private view cutdown RW

注意：在上例中，排除snmpUsmMIB，排除snmpVacmMIB，并排除snmpCommunityMIB。这些对象一起可用于获取有关已配置用户和社区字符串的信息，以获得对设备的管理访问权限。建议在公共用户可以访问的任何设备上从视图中排除这些对象。

此配置阻止检索路由表(ipRouteTable)和地址解析协议(ARP)表(ipNetToMediaTable)的请求，但允许所有其他请求通过。如果您有较旧版本的Cisco IOS®软件，它将无法识别MIB对象ipRouteTable，因此请改用以下配置：

snmp-server view cutdown iso included

!--- ISO is used as a starting point as it is the snmp 'root'.

snmp-server view cutdown 1.3.6.1.2.1.4.21 excluded

snmp-server view cutdown 1.3.6.1.2.1.4.22 excluded

snmp-server view cutdown at excluded

snmp-server view cutdown 1.3.6.1.6.3.15 excluded

!--- The additional object snmpUsmMIB is excluded.

snmp-server view cutdown 1.3.6.1.6.3.16 excluded

!--- The additional object snmpVacmMIB is excluded.

snmp-server view cutdown 1.3.6.1.6.3.18 excluded

!--- The additional object snmpCommunityMIB is excluded.

snmp-server community public view cutdown RO

snmp-server community private view cutdown RW

注意：在上例中，排除snmpUsmMIB，排除snmpVacmMIB，并排除snmpCommunityMIB。这些对象一起可用于获取有关已配置用户和社区字符串的信息，以获得对设备的管理访问权限。建议在公共用户可以访问的任何设备上从视图中排除这些对象。

在这两个示例中，您都可以替换您自己的社区字符串。

这些配置的结果是，路由器在查询时不再返回ARP表或IP路由表。这可防止SNMP网络发现在有问题的路由器上产生CPU峰值，但也会从路由器中消除一定程度的可管理性。

如果路由表发生更改，以前没有显示CPU峰值的路由器可能会开始显示。响应IP路由表请求所需的周期数取决于路由表中的路由数。如果路由数增加，CPU利用率也会增加。

建议2:打开CEF

在Cisco IOS代码中进行了更改，允许SNMP在使用CEF交换时查询Cisco快速转发(CEF)表以查找路由条目。这大大改善了情况。启用CEF后，SNMP代理将使用来自转发信息库(FIB)的信息对路由或ARP表的get-next/get-bulk操作做出响应。 FIB按字典顺序存储，无需排序。如果未启用CEF，SNMP代理将使用来自路由信息库(RIB)的信息做出响应，该信息必须按字典顺序分类，从而导致CPU使用率较高。

按照下面的Bug ID链接查看详细的Bug信息。

CSCdk54265(仅注册客户) — 当从网络管理站通过SNMP轮询路由表时生成CPU HOG。

轮询某些 MIB

网络管理应用程序经常使用SNMP从设备检索信息。一个示例是Resource Manager Essentials(RME),CiscoWorks 2000产品套件中的应用。RME可以检索在CISCO-FLASH-MIB中定义的闪存信息。如果设备有ATA闪存盘，则可能导致CPU使用率跳转。

按照下面的Bug ID链接查看详细的Bug信息。

CSCdt97325(仅限注册客户)

要验证并应用解决方法，请执行以下步骤：

1. 验证设备的其中一个插槽中是否有ATA闪存卡：

Router#show disk1:

******** ATA Flash Card Geometry/Format Info ********

ATA CARD GEOMETRY

Number of Heads:        12

Number of Cylinders     906

Sectors per Cylinder    63

Sector Size             512

Total Sectors           684936

ATA CARD FORMAT

Number of FAT Sectors  84

Sectors Per Cluster    32

Number of Clusters     21372

Number of Data Sectors 684117

Base Root Sector       169

Base FAT Sector        1

Base Data Sector       201

Router#

如果不确定或未获得show diskX命令的输出，请运行show tech命令并搜索磁盘。

2. 一旦您知道有ATA闪存盘，您就可以应用以下解决方法来防止FLASH-MIB上的SNMP查询：

Router(config)#snmp-server view

iso included

!--- ISO is used as a starting point as it is the snmp 'root'.

Router(config)#snmp-server view

ciscoFlashMIB excluded

!--- The additional object snmpUsmMIB is excluded.

Router(config)#snmp-server view

1.3.6.1.6.3.15 excluded

!--- The additional object snmpVacmMIB is excluded.

Router(config)#snmp-server view

1.3.6.1.6.3.16 excluded

!--- The additional object snmpCommunityMIB is excluded.

Router(config)#snmp-server view

1.3.6.1.6.3.18 excluded

Router(config)#snmp-server community

view

ro

Router(config)#snmp-server community

view

rw

Router(config)#exit

Router#

注意：在上述配置中为<any_word>在每行选择相同的字。

注意：在上例中，排除snmpUsmMIB，排除snmpVacmMIB，并排除snmpCommunityMIB。这些对象一起可用于获取有关已配置用户和社区字符串的信息，以获得对设备的管理访问权限。建议在公共用户可以访问的任何设备上从视图中排除这些对象。

3. 验证其实施是否正确：

Router#show run

...

snmp-server view

iso included

!--- ISO is used as a starting point as it is the snmp 'root'.

snmp-server view

ciscoFlashMIB excluded snmp-server view

internet.6.3.15 excluded

!--- The additional object snmpUsmMIB is excluded.

snmp-server view

internet.6.3.16 excluded

!--- The additional object snmpVacmMIB is excluded.

snmp-server view

internet.6.3.18 excluded

!--- The additional object snmpCommunityMIB is excluded.

snmp-server community

view

RW snmp-server community

view

RO

注意:<any_word>、<write_community_string>和<read_community_string>是配置中的那些。

注意：在上例中，排除snmpUsmMIB，排除snmpVacmMIB，并排除snmpCommunityMIB。这些对象一起可用于获取有关已配置用户和社区字符串的信息，以获得对设备的管理访问权限。建议在公共用户可以访问的任何设备上从视图中排除这些对象。

4. 发出show proc cpu命令以验证SNMP的CPU-Util是否关闭并查找IP_SNMP进程。

注意： Bug CSCdt97325也已在一些较新的Cisco IOS版本中修复，因此请检查该Bug以了解任何详细信息。

与轮询MIB相关的其他错误：

按照下面的Cisco Bug ID链接查看详细的Bug信息。

- CSCdm67427(仅注册客户) — 轮询ATM子接口从设备返回CPU HOG消息。

- CSCdu63734(仅注册客户)- Flash MIB对ifs进行的调用太多。

- CSCdu48652(仅注册客户)- Flash MIB查询在7200上挂起语音呼叫。

- CSCds53368(仅注册客户)- CISCO-FLASH-MIB中的ciscoFlashPartitionEntry对象问题。

- CSCdu55091(仅注册客户) — 某些SNMP对象的2500 snmpgetnext会导致追踪返回。

- CSCdx54836(仅注册客户) — 闪存MIB上的SNMP轮询导致交换机的CPU使用率较高。

相关信息

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

- 技术支持和文档 - Cisco Systems