目錄

簡介

必要條件

需求

採用元件

慣例

SNMP引擎進程導致的CPU使用率高

NMS站輪詢的大型路由和/或ARP表

輪詢特定MIB

相關資訊

相關思科支援社群討論

簡介

本檔案將說明如何在路由器（尤其是低端路由器）上執行SNMP引擎程式，進而對路由器中的CPU使用率較高進行疑難排解。

必要條件

需求

本文檔的讀者應瞭解以下主題：

- SNMP

- Cisco IOS

採用元件

本檔案中的資訊是根據執行Cisco IOS®軟體的路由器。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路正在作用，請確保您已瞭解任何指令可能造成的影響。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

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

運行時（毫秒）

已呼叫

秒

5秒

1分鐘

5分鐘

TTY

流程

1

68

258816

0

0.00%

0.00%

0.00%

0

負載計

2

0

1

0

0.00%

0.00%

0.00%

0

OSPF Hello

3

788132

131480

5994

0.00%

0.00%

0.00%

0

檢查堆疊

4

0

1

0

0.00%

0.00%

0.00%

0

區塊管理器

5

56

131

427

0.00%

0.00%

0.00%

0

池管理器

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)。

注意：在生產網路中運行debug可能會使路由器不堪重負。

發生與簡單網路管理通訊協定(SNMP)相關的CPU使用率高的原因可能有兩種：

1. NMS站輪詢的大型路由和/或ARP表

2. 輪詢特定MIB

NMS站輪詢的大型路由和/或ARP表

網路管理站查詢路由器的整個路由表，以瞭解其他網路。它使用此資訊查詢其它路由器並查詢它們對其周圍網路的知識。通過這種方式，管理站可以瞭解整個網路的拓撲。

路由器以雜湊格式儲存路由表，更有利於快速路由搜尋。但是，根據RFC1213，路由的SNMP響應需要以字典順序返回。因此，對於路由器收到的每個SNMP請求，必須在構建SNMP響應PDU之前以字典順序對雜湊表進行排序。路由表越大，排序的CPU佔用率就越高。

就CPU排程器而言，SNMP是低優先順序的程式，因此另一個需要CPU資源的程式優先處理。因此，雖然在此方案中會發生CPU峰值，但是它們不應影響效能。

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

為了避免效能問題，請強制路由器從網路管理系統伺服器提前結束路由表查詢。將路由器配置為在收到路由表請求的開始部分立即使用complete消息進行響應，如下所示：

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 Express Forwarding(CEF)表以查詢路由條目。這大大改善了情況。啟用CEF後，SNMP代理使用來自轉發資訊庫(FIB)的資訊對路由或ARP表的get-next/get-bulk操作做出響應。 FIB以字典順序儲存，無需排序。如果未啟用CEF，SNMP代理將使用來自路由資訊庫(RIB)的資訊進行響應，該資訊必須按照字典順序排序，從而導致高CPU。

按照下方錯誤ID連結檢視詳細錯誤資訊。

CSCdk54265(僅限註冊客戶) — 當從網路管理站通過SNMP輪詢路由表時生成CPU HOG。

輪詢特定MIB

網路管理應用程式經常使用SNMP從裝置檢索資訊。例如，Resource Manager Essentials(RME),CiscoWorks 2000產品套件中的應用程式。RME可以檢索CISCO-FLASH-MIB中定義的快閃記憶體資訊。如果裝置具有ATA快閃記憶體磁碟，則可能導致CPU利用率跳躍。

按照下方錯誤ID連結檢視詳細錯誤資訊。

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進程。

注意：錯誤CSCdt97325已在某些較新版本的Cisco IOS中修正，因此請檢查該錯誤以瞭解所有詳細資訊。

與輪詢MIB相關的其他錯誤：

請依照下方的Cisco錯誤ID連結操作，並檢視詳細錯誤資訊。

- CSCdm67427(僅限註冊客戶) — 輪詢ATM子介面從裝置返回CPU HOG消息。

- CSCdu63734(僅限註冊客戶) — 快閃記憶體MIB對ifs的呼叫過多。

- CSCdu48652(僅限註冊客戶)- Flash MIB查詢掛起7200上的語音呼叫。

- CSCds53368(僅限註冊客戶)- CISCO-FLASH-MIB中的ciscoFlashPartitionEntry對象問題。

- CSCdu55091(僅限註冊客戶)- 2500 snmpgetnext對於某些SNMP對象，會導致追蹤回退。

- CSCdx54836(僅限註冊客戶) — 快閃記憶體MIB上的SNMP輪詢導致交換機上的CPU使用率高。

相關資訊

- 疑難排解思科路由器 CPU 高使用率的問題

- 技術支援與文件 - Cisco Systems