概要
このドキュメントでは、ルータ(特にローエンド ルータ)での SNMP ENGINE プロセスの実行が原因で生じる高い CPU 使用率に関する問題をトラブルシューティングする方法について説明します。
前提条件
要件
このドキュメントの読者は次のトピックについての専門知識を有している必要があります。
使用するコンポーネント
このドキュメントの情報は、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 |
プロセス |
1 |
68 |
258816 |
0 |
0.00% |
0.00% |
0.00% |
0 |
Load Meter |
0 |
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; 管理情報ベース)をチェックします。
注:実稼働ネットワーク上でデバッグを実行すると、ルータに負荷がかかることがあります。
Simple Network Management Protocol(SNMP; 簡易ネットワーク管理プロトコル)との関連で CPU の使用率が高くなる現象には、次の 2 つの原因が考えられます。
-
NMS ステーションによるサイズの大きなルート テーブルまたは ARP テーブルのポーリング
-
特定 MIB のポーリング
NMS ステーションによる大きなルート テーブルと ARP テーブルのポーリング
ネットワーク管理ステーションは、他のネットワークを学習するために、ルート テーブル全体に関してルータにクエリーを実行します。この情報を使用して他のルータを見つけ、それらのルータの周辺ネットワークに関する情報についてクエリーを実行します。このようにすることで、管理ステーションはネットワーク全体のトポロジを把握できます。
ルータには、ルート検索を効率化するために、ハッシュ形式でルート テーブルが保存されています。ただし、ルートのSNMP応答は、RFC1213に従って辞書順に返される必要があります。したがって、ルータが受信する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が除外され、snmpCommunityMIBが除外されます。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。
このように設定すると、ルート テーブル(ipRouteTable)および Address Resolution Protocol(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が除外され、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(登録ユーザ専用)
確認、および回避策の適用を行うには、次の操作を実行します。
-
次のように、デバイスのいずれかのスロットに 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 コマンドを実行して、ディスクの検索を行います。
-
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が除外され、snmpCommunityMIBが除外されます。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。
-
設定が正しく実装されたことを確認します。
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が除外され、snmpCommunityMIBが除外されます。これらのオブジェクトを同時に使用することによって、デバイスへの管理アクセスに必要な設定済みユーザ、およびコミュニティ ストリングに関する情報を取得できます。これらのオブジェクトについては、パブリック ユーザがアクセス可能なデバイスでは非表示にしておくことを推奨します。
-
show proc cpu コマンドを発行して、SNMP の CPU 使用率が低下したかどうかを確認し、IP_SNMP プロセスを探します。
注:バグCSCdt97325は、一部の新しいCisco IOSリリースでも修正されています。詳細については、バグを確認してください。
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 使用率が高くなる。
関連情報