IP : IP アプリケーション サービス

IP の簡易ネットワーク管理プロトコル(SNMP)によって生じる CPU の高使用率

2010 年 11 月 15 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2013 年 8 月 21 日) | 英語版 (2006 年 6 月 28 日) | フィードバック

目次

概要
前提条件
      要件
      使用するコンポーネント
      表記法
SNMP ENGINE プロセスが原因で生じる CPU の高使用率
      NMS ステーションによる大きなルート テーブルと ARP テーブルのポーリング
      特定 MIB のポーリング
関連するシスコ サポート コミュニティ ディスカッション
関連情報

概要

このドキュメントでは、ルータ(特にローエンド ルータ)に見られる、SNMP ENGINE プロセスが原因で生じる CPU の高い使用率に関する問題を解決する方法について説明します。



前提条件

要件

このドキュメントの読者は次の項目に関する知識が必要です。

  • SNMP

  • Cisco IOS



使用するコンポーネント

このドキュメントの情報は、Cisco IOS ソフトウェアが稼働しているルータに基づいています。

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。対象のネットワークが実稼働中である場合には、どのような作業についても、その潜在的な影響について確実に理解しておく必要があります。



表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。



SNMP ENGINE プロセスが原因で生じる CPU の高使用率

次のようなメッセージがルータのコンソールに表示されることがあります。

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

これは、デバイスの SNMP エージェントが要求を処理するために時間がかかりすぎていることを示しています。

show process cpu コマンドの出力を使用することによって、コマンドの出力を使用すると、ルータにおける CPU の高使用の原因を突き止めることができます。

次の例では、show processes 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

Chunk Manager

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 ENGINE

debug snmp コマンドは、クエリー中の Object ID(OID)または Management Information Base(MIB; 管理情報ベース)をチェックします。

注:実稼働中のネットワークで debug コマンドを実行すると、ルータに過剰な負荷がかかる場合があります。

Simple Network Management Protocol(SNMP; 簡易ネットワーク管理プロトコル)との関連で CPU の使用率が高くなる現象には、次の 2 つの原因が考えられます。

  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 は 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

!--- 追加オブジェクトである snmpUsmMIB は除外されます。

snmp-server view cutdown 1.3.6.1.6.3.16 excluded

!--- 追加オブジェクトである snmpVacmMIB は除外されます。

snmp-server view cutdown 1.3.6.1.6.3.18 excluded

!--- 追加オブジェクトである snmpCommunityMIB は除外されます。
 
snmp-server community public view cutdown RO
snmp-server community private view cutdown RW

caution 注意: 上記の例では、snmpUsmMIB が除外され、snmpVacmMIB が除外され、さらに snmpCommunityMIB が除外されています。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。

このように設定すると、ルート テーブル(ipRouteTable)および Address Resolution Protocol(ARP; アドレス解決プロトコル)テーブル(ipNetToMediaTable)の検索要求をブロックしながら、他のすべての要求については許可できるようになります。古いバージョンの Cisco IOS® ソフトウェアを使用している場合には、MIB オブジェクト ipRouteTable を認識することができません。そのため、代わりに次の設定を使用します。

snmp-server view cutdown iso included

!--- ISO は 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

!--- 追加オブジェクトである snmpUsmMIB は除外されます。

snmp-server view cutdown 1.3.6.1.6.3.16 excluded

!--- 追加オブジェクトである snmpVacmMIB は除外されます。

snmp-server view cutdown 1.3.6.1.6.3.18 excluded

!--- 追加オブジェクトである snmpCommunityMIB は除外されます。
 
snmp-server community public view cutdown RO 
snmp-server community private view cutdown RW

caution 注意: 上記の例では、snmpUsmMIB が除外され、snmpVacmMIB が除外され、さらに snmpCommunityMIB が除外されています。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。

どちらの例でも、ユーザ固有のコミュニティ ストリングで置き換えることができます。

このように設定すると、ルータでクエリーを行った場合に、ARP テーブルまたは IP ルート テーブルがルータから返されなくなります。そのため、SNMP ネットワークの検出が原因で問題のルータの CPU 使用率が急激に高くなる現象は回避できますが、同時に、このルータの管理性を低下させてしまいます。

ルーティング テーブルを変更すると、以前は問題のなかったルータでも CPU 使用率が急上昇する可能性があります。IP ルート テーブルの要求に対する応答に必要なサイクル数は、ルーティング テーブルにあるルート数に依存します。そのため、ルート数が増加すると、CPU 使用率も増加します。

推奨事項 2:CEF のオン

Cisco Express Forwarding(CEF; シスコ高速転送)スイッチングを使用している場合に、SNMP を使用して CEF テーブルに対してクエリーを行ってルーティング エントリを検索できるように、Cisco IOS のコードが変更されました。これにより、状況が大幅に改善されます。CEF がイネーブルの場合、ルーティング テーブルまたは ARP テーブルの get-next/get-bulk 操作に対して、SNMP エージェントは Forwarding Information Base(FIB; 転送情報ベース)から取得した情報で応答します。FIB は辞書順に保管されているため、ソートの必要はありません。CEF がイネーブルでない場合はSNMP エージェントは Routing Information Base(RIB; ルーティング情報ベース)から取得した情報で応答します。この場合、辞書編集上の順序にソートする必要があるため、CPU の使用率が高くなります。

次の Bug ID リンクを参照して、詳細な不具合情報について確認してください。

CSCdk54265登録ユーザ専用):ネットワーク管理ステーションから SNMP 経由でルーティング テーブルをポーリングする際には、CPU HOG が生成されます。



特定 MIB のポーリング

ネットワーク管理アプリケーションは、SNMP を使用してデバイスから頻繁に情報を取得します。具体例としては、CiscoWorks 2000 製品群のアプリケーションである Resource Manager Essentials(RME)があります。RME は、CISCO-FLASH-MIB に定義されたフラッシュ情報を取得できます。デバイスに ATA フラッシュ ディスクが装備されている場合には、CPU 使用率が急激に上昇することがあります。

次の Bug 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 <any_word> iso included
    
    !--- ISO は snmp の「root」であるため、開始点として使用されます。
     
    Router(config)#snmp-server view <any_word> ciscoFlashMIB excluded 
    
    !--- 追加オブジェクトである snmpUsmMIB は除外されます。
    
    Router(config)#snmp-server view <any_word> 1.3.6.1.6.3.15 excluded
    
    !--- 追加オブジェクトである snmpVacmMIB は除外されます。
    
    Router(config)#snmp-server view <any_word> 1.3.6.1.6.3.16 excluded
    
    !--- 追加オブジェクトである snmpCommunityMIB は除外されます。
    
    Router(config)#snmp-server view <any_word> 1.3.6.1.6.3.18 excluded
    Router(config)#snmp-server community <read_community_string> view <any_word> ro 
    Router(config)#snmp-server community <write_community_string> view <any_word> rw 
    Router(config)#exit
    Router#

    注:上記の設定では、すべての行で、<any_word> には同じ単語を使用してください。

    caution 注意: 上記の例では、snmpUsmMIB が除外され、snmpVacmMIB が除外され、さらに snmpCommunityMIB が除外されています。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。

  3. 設定が正しく実装されたことを確認します。

    Router#show run 
    ... 
    snmp-server view <any_word> iso included
    
    !--- ISO は snmp の「root」であるため、開始点として使用されます。
    
    snmp-server view <any_word> ciscoFlashMIB excluded
    snmp-server view <any_word> internet.6.3.15 excluded
    
    !--- 追加オブジェクトである snmpUsmMIB は除外されます。
    
    snmp-server view <any_word> internet.6.3.16 excluded
    
    !--- 追加オブジェクトである snmpVacmMIB は除外されます。
    
    snmp-server view <any_word> internet.6.3.18 excluded 
    
    !--- 追加オブジェクトである snmpCommunityMIB は除外されます。
    
    snmp-server community <write_community_string> view <any_word> RW 
    snmp-server community <read_community_string> view <any_word> RO
    

    注:<any_word>、<write_community_string>、および <read_community_string> は、この設定例で使用されているものです。

    caution 注意: 上記の例では、snmpUsmMIB が除外され、snmpVacmMIB が除外され、さらに snmpCommunityMIB が除外されています。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。

  4. show proc cpu コマンドを発行して、SNMP の CPU 使用率が低下したかどうかを確認し、IP_SNMP プロセスを探します。

注:Cisco IOS の最近のリリースでは Bug CSCdt97325 も修正されていますので、不具合情報の詳細を確認してください。

MIB のポーリングに関連するその他の不具合:

次の Cisco Bug ID リンクを参照して、詳細な不具合情報について確認してください。

  • CSCdm67427登録ユーザ専用):ATM サブ インターフェイスのポーリングで、デバイスから CPU HOG メッセージが返される。

  • CSCdu63734登録ユーザ専用):フラッシュ MIB によって ifs の呼び出しが多くなる。

  • CSCdu48652登録ユーザ専用):フラッシュ MIB のクエリーにより、7200 での音声コールがハングする。

  • CSCds53368登録ユーザ専用):CISCO-FLASH-MIB の ciscoFlashPartitionEntry オブジェクトに問題がある。

  • CSCdu55091登録ユーザ専用):特定 SNMP オブジェクトの 2500 snmpgetnext でトレース バックが発生する。

  • CSCdx54836登録ユーザ専用):SNMP でフラッシュ MIB をポーリングすると、スイッチで CPU 使用率が高くなる。




関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


関連情報


Document ID: 7270