ルータ : Cisco 10000???? ??????? ???

Cisco ルータの CPU 使用率が高い場合のトラブルシューティング

2008 年 9 月 23 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2013 年 8 月 21 日) | 英語版 (2008 年 7 月 24 日) | フィードバック

目次

概要
前提条件
      要件
      使用するコンポーネント
      表記法
CPU 使用率が高い場合の症状
初期トラブルシューティング
原因の特定と問題の解決
      CPU 高使用率の原因が割り込みにある場合
      CPU 高使用率の原因がプロセスにある場合
      PCI およびファースト メモリ プールに非常に高い使用率が示される場合
      %SNMP-4-HIGHCPU: Process exceeds [dec]ms threshold ([dec]ms IOS quantum) for [chars] of [chars]--result [chars]
詳細情報を取得するためのコマンド
      show processes cpu コマンド
      show interfaces コマンド
      show interfaces switching コマンド
      show interfaces stat コマンド
      show ip nat translations
      show align コマンド
      show version コマンド
      show log コマンド
定期的にデータを収集するための UNIX シェル スクリプト
関連するシスコ サポート コミュニティ ディスカッション
関連情報

概要

このドキュメントでは、Cisco ルータで CPU 使用率が高い場合の一般的な症状と原因について説明し、トラブルシューティングのガイドラインとソリューションを示しています。

前提条件

要件

Cisco ルータで CPU の使用率が高い場合のトラブルシューティングを行うには、Cisco IOS(R) ソフトウェアのスイッチング パスを理解しておく必要があります。Cisco IOS ソフトウェアのスイッチング パスについての詳細は、『パフォーマンス チューニングに関する基本事項』を参照してください。

使用するコンポーネント

このドキュメントは、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。

表記法

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

CPU 使用率が高い場合の症状

次のリストは、CPU 使用率が高い場合の一般的な症状を示しています。これらの症状のいずれかが見られる場合は、このドキュメントのトラブルシューティング手順に従って問題を軽減させてください。

  • show processes cpu コマンドの出力での高いパーセンテージ表示

    ご使用の Cisco デバイスの show processes cpu コマンドの出力データがあれば、アウトプットインタープリタpopup_icon.gifを使用して今後予想される障害や修正を表示できます。アウトプットインタープリタpopup_icon.gifを使用するためには、登録ユーザであり、ログインしていて、さらに JavaScript を有効にしている必要があります。
    一部ツールについては、ゲスト登録のお客様にはアクセスできない場合がありますことを、ご了承ください。

  • 低いパフォーマンス

  • ルータ上のサービスが正常に応答しない。たとえば、次のような症状が起こる。

    • Telnet の応答が遅い、またはルータに Telnet できない

    • コンソールの応答が遅い

    • ping の応答が遅い、またはまったく応答しない

    • ルータが他のルータにルーティング アップデートを送信しない

初期トラブルシューティング

上記のいずれかの症状に遭遇した場合は、次のようにします。

  • セキュリティ問題が発生していないかどうかをチェックします。一般に、CPU の高使用率は、ネットワーク内で活動するワームやウィルスなどのセキュリティ問題によって発生します。たとえば、最近ネットワークに対する変更を行っていない場合は、これが原因になっている可能性が高くなります。通常は、アクセス リストに行を追加するといった設定の変更によって、この問題の影響を軽減できます。「Cisco 製品セキュリティアドバイザリおよび注意」ページには、一番可能性が高い原因の検出方法と、具体的な回避策が記載されています。

    詳細については、次を参照してください。

  • undebug all コマンドまたは no debug all コマンドを発行して、必ずルータのすべてのデバッグ コマンドを無効にしておきます。デバッグ コマンドの使用方法については、『debug コマンドの使用方法』を参照してください。

  • ルータで show コマンドを発行できるかどうかを確認します。発行できる場合は、これらの show コマンドを使用して、すぐに情報の収集を開始します。

  • ルータへのアクセス可否を確認します。この問題に再現性があるかどうかを確認します。再現性がある場合は、ルータの電源をいったんオフにしてから再度オンにして、scheduler interval 500 コマンドを設定してから問題を再現します。これにより、優先順位の低いプロセスが 500 ミリ秒ごとに実行されるようスケジュールされるため、CPU 使用率が 100 % であっても、いくつかのコマンドを実行できます。Cisco 7200 および Cisco 7500 シリーズ ルータでは、scheduler allocate 3000 1000 コマンドを使用します。

  • CPU 高負荷時の症状が、短く不規則な間隔で発生しているかを確認します。このような間隔で発生している場合は、show processes cpu コマンドの出力をくり返し収集します。これにより、CPU 高使用率の原因が割り込みにあるのか、または特定のプロセスにあるのかがわかります。この UNIX スクリプトを使用し、最初の観察結果に基づいてこのスクリプトを変更して、問題の調査を進めるために必要なデータを収集します。

原因の特定と問題の解決

show processes cpu コマンドを使用して、CPU の使用率が高くなっている原因が割り込みにあるか、プロセスにあるかをチェックします。

CPU 高使用率の原因が割り込みにある場合

詳細は、『割り込みによって CPU 使用率が高くなる場合のトラブルシューティング』を参照してください。割り込みによって CPU 使用率が高くなる原因が CEF のパケット交換による可能性が高い場合、CPU の使用率によるルータ パフォーマンスへの影響はありません。

CPU 高使用率の原因がプロセスにある場合

どのプロセスが CPU に負荷を与えているかをチェックします。プロセスについて通常とは異なるアクティビティがあれば、ログにエラー メッセージが記録されます。したがって、まず大量の CPU サイクルを消費しているプロセスに関連するエラーがないかどうかを show logging exec コマンドの出力でチェックします。

またデバッグは、プロセスによる CPU の高使用率をトラブルシューティングするために非常に役立ちます。ただし、デバッグを行うことで CPU 使用率がより高くなるため、デバッグを実行する際には細心の注意が必要です。安全で有用なデバッグを行うには、これらの前提条件を満たす必要があります。

  • 適切な logging destination [severity-level] 設定コマンドを使用して、バッファ ロギング以外のログの出力先をディセーブルにするか、またはそのロギング重大度を 7(デバッギング)から 6(情報提供)またはそれ以下に設定します。イネーブルになっているログの出力先と対応レベルは、show logging exec コマンドのヘッダー行に示されています。

  • ロギング バッファのサイズは、十分な情報を取得できるように増加しておく必要があります。詳細は、logging buffered グローバル設定コマンドの説明を参照してください。

  • より的確な情報をデバッグで得るために、日時とミリ秒のタイムスタンプをイネーブルにしておきます。詳細は、service timestamps グローバル設定コマンドの説明を参照してください。

プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』には、IP パケットのデバッグ セッション例が示されています。

特定のプロセスでの CPU 高使用率のトラブルシューティングについては、次の該当するリンクを参照してください。

  • ARP Input:ドキュメント『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』の「ARP Input」セクション

  • BGP ルータ:ドキュメント『トラブルシューティング:BGP スキャナまたは BGP ルータ プロセスが原因で発生する CPU の高使用』の「CPU 高使用の原因が BGP ルータ プロセスにある場合」セクション

  • BGP スキャナ:ドキュメント『トラブルシューティング:BGP スキャナまたは BGP ルータ プロセスが原因で発生する CPU の高使用』の「CPU 高使用の原因が BGP スキャナ プロセスにある場合」セクション

  • EXEC:『EXEC および仮想 EXEC プロセスでの CPU 高使用率』

  • HyBridge Input:『ATM インターフェイスが備わるルータでの、Hybridge 入力プロセスによる CPU 高使用率のトラブルシューティング』

  • IP Input:『IP インプット プロセスにより CPU 使用率が高い場合のトラブルシューティング』

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

  • LC ADJ Updater:『Cisco 12000 シリーズ インターネット ルータの LC 隣接関係更新処理で CPU の使用率が高くなることの原因』

  • TCP Timer:ドキュメント『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』の「TCP Timer」セクション

  • TTY Background:ドキュメント『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』の「TTY バックグラウンド」セクション

  • Virtual EXEC:『EXEC および仮想 EXEC プロセスでの CPU 高使用率』

  • Vtemplate Backgr:ドキュメント『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』の「仮想テンプレート バックグラウンド」セクション

  • その他のプロセス:ドキュメント『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』の「他のプロセス」セクション

PCI およびファースト メモリ プールに非常に高い使用率が示される場合

PCI およびファースト メモリ プールで空きメモリの低下が見られることは正常です。PCI メモリは、接続されている PCI バスの PRP メインボード上の GT64260 コントローラに対するメモリ アクセスに使用されます。このメモリは、システム コントローラと他の部分の間の内部通信に使用されるため、常に使用率が高いように見えます。

さらに多くのメモリが必要な場合は、プロセッサ プール メモリにフォール バックします。ファースト メモリは、ハードウェアの Interface Descriptor Block(IDB; インターフェイス デスクリプション ブロック)データ構造による使用のために確保された少量のメモリです。このメモリはブートアップ中も完全に予約され、メモリが完全に消費されているために常に高い使用率が示されます。このため、ファースト メモリ プールで空きメモリの低下が見られることは正常です。

%SNMP-4-HIGHCPU: Process exceeds [dec]ms threshold ([dec]ms IOS quantum) for [chars] of [chars]--result [chars]

CPU ホグ メッセージは次のようになります。

SNMP-4-HIGHCPU: Process exceeds 200ms threshold (200ms IOS quantum)
for GET of rmon.19.16.0--result rmon.19.16.0

IOS の 12.4(13) では、新しいメッセージ(HIGHCPU)が追加されました。CPU がプロセスにより 200 ミリ秒以上占有されると、HIGHCPU メッセージが報告されます。HIGHCPU メッセージによるルータへの影響はありません。どのプロセスが CPU の高使用率の原因であるのかが示されているだけです。HIGHCPU メッセージは CPUHOG メッセージに似ていますが、HIGHCPU メッセージには大幅に低い許容しきい値が設定されています(CPUHOG メッセージと比較した場合、1/10 の時間(ミリ秒での測定))。2600 の 12.4(13) より前のバージョンでは、プロセスはより長い時間実行されましたが、この IOS バージョンにはこの機能拡張が用意されていなかったため、メッセージは生成されませんでした。

SNMP PDU プロセス(MIB オブジェクト クエリ)がサポートされ、PDU 内の各オブジェクトがほぼ同時に取得されるように、単一の CPU タイム クアンタムで実行されます。これは SNMP プロトコル標準によって求められる要件です。一部のオブジェクトはシステム内の大量のデータの集約であるため、これらが単一のオブジェクトであったとしても、その実装の方法により大量のプロセスが関与します。MIB の実装ルールで要求されるように CPU が解放されない場合、このエラー メッセージが発生する可能性があります。また、この同じ理由により、いくつかの異なるオブジェクトを同じオブジェクト グループまたはテーブル内でポーリングし、エラー メッセージが表示される場合は異常ではありません。

つまり、このメッセージは予想以上に大きな CPU 時間(ただし CPUHOG ではない)が使用されるオブジェクトを特定するために使用されます。一部の NMS または実装ツールは、ポーリング時に正常に動作しません。この問題は CSCsl18139登録ユーザのみ)でドキュメント化されています。
一部ツールについては、ゲスト登録のお客様にはアクセスできない場合がありますことを、ご了承ください。

詳細情報を取得するためのコマンド

これらのコマンドを使用すると、問題に関する詳細な情報を取得できます。

ルータがまったくアクセス不能になった場合は、まず、ルータの電源を一旦オフにしてから再度オンにします。次に、一定間隔で上記のコマンドの出力を収集します。ただし、メッセージのログが syslog サーバに記録される show log コマンドは除外されます。出力を収集する間隔は 5 分にします。この UNIX シェル スクリプトを使用すると、データを手動または自動で取得できます。また、HTTP または SNMP を使用して収集することも可能です。Cisco ルータで HTTP および SNMP を設定する方法については、ドキュメント『Cisco IOS ソフトウェアの設定』を参照してください。

show processes cpu コマンド

show processes cpu コマンドのヘッダー例を次に示します。

 CPU utilization for five seconds: X%/Y%; one minute: Z%; five minutes: W% 
  PID  Runtime(ms)  Invoked  uSecs    5Sec   1Min   5Min TTY Process 

次の表に、このヘッダーのフィールドの説明を示します。

フィールド 説明
X 最後の 5 秒間の合計使用率の平均(割り込みとプロセス)
Y 割り込みを原因とする最後の 5 秒間の使用率の平均 1
Z 最後の 1 分間の合計使用率の平均 2
W 最後の 5 分間の合計使用率の平均 2
PID プロセス ID
Runtime プロセスが使用した CPU 時間(ミリ秒)
Invoked プロセスがコールされた回数
uSecs 各呼び出しの CPU 時間のマイクロ秒
5Sec タスクによる最後の 5 秒間の CPU 使用率
1Min タスクによる最後の 1 分間の CPU 使用率 2
5Min タスクによる最後の 5 分間の CPU 使用率 2
TTY プロセスを制御している端末
プロセス プロセスの名前

1 プロセス レベルでの CPU 使用率 = X - Y

2 値は算術平均ではなく、指数減衰平均です。そのため、新しい値ほど、算出される平均に大きな影響を与えます。

show processes cpu コマンドの詳細な説明については、このリンクを使用してください。

注:合計 CPU 使用率を、ルータのパケット交換能力の余力を示す尺度としてとらえないでください。Cisco 7500 ルータでは、Versatile Interface Processor(VIP)と Route/Switch Processor(RSP; ルート スイッチ プロセッサ)は CPU 使用率を線形ではレポートしません。1 秒当たりのパケット交換能力の半分ほどは、CPU 使用率が 90 〜 95% になった後に発現します。

show interfaces コマンド

show interfaces コマンドの詳細な説明は、コマンド リファレンスに記載されています。

show interfaces switching コマンド

このコマンドは、インターフェイス上のアクティブなスイッチング パスを確認する際に使用します。Cisco IOS ソフトウェアのスイッチング パスについての詳細は、ドキュメント『スイッチング パスの設定』を参照してください。

次に、インターフェイスが 1 つの場合の show interfaces switching コマンドの出力例を示します。

RouterA#show interfaces switching
 Ethernet0 
           Throttle count          0 
         Drops         RP          0         SP          0 
   SPD Flushes       Fast          0        SSE          0 
   SPD Aggress       Fast          0 
  SPD Priority     Inputs          0      Drops          0 

      Protocol       Path    Pkts In   Chars In   Pkts Out  Chars Out 
         Other    Process          0          0        595      35700 
             Cache misses          0 
                     Fast          0          0          0          0 
                Auton/SSE          0          0          0          0 
            IP    Process          4        456          4        456 
             Cache misses          0 
                     Fast          0          0          0          0 
                Auton/SSE          0          0          0          0 
           IPX    Process          0          0          2        120 
             Cache misses          0 
                     Fast          0          0          0          0 
                Auton/SSE          0          0          0          0 
 Trans. Bridge    Process          0          0          0          0 
             Cache misses          0 
                     Fast         11        660          0          0 
                Auton/SSE          0          0          0          0 
       DEC MOP    Process          0          0         10        770 
             Cache misses          0 
                     Fast          0          0          0          0 
                Auton/SSE          0          0          0          0 
           ARP    Process          1         60          2        120 
             Cache misses          0 
                     Fast          0          0          0          0 
                Auton/SSE          0          0          0          0 
           CDP    Process        200      63700        100      31183 
             Cache misses          0 
                     Fast          0          0          0         0 
                Auton/SSE          0          0          0          0 

出力には、そのインターフェイスで設定されているすべてのプロトコルのスイッチング パスがリストされるため、ルータを通過しているトラフィックの種類と量が簡単にわかります。次の表に、出力フィールドの説明を示します。

フィールド 定義
プロセス 処理されたパケット。これらはルータ宛てのパケット、またはファースト スイッチング キャッシュ内にエントリがなかったパケットです。
Cache misses ファースト スイッチング キャッシュ内にエントリがなかったパケット。この宛先(またはフロー。設定されているファースト スイッチングのタイプによる)の最初のパケットはプロセス交換されます。発信インターフェイスでファースト スイッチングが明示的にディセーブルにされていない限り、後続のパケットはすべてファースト スイッチングで交換されます。
Fast ファースト スイッチングで交換されたパケット。ファースト スイッチングはデフォルトでイネーブルになっています。
Auton/SSE 自律スイッチング、シリコン スイッチング、または分散スイッチングによって交換されたパケット。スイッチ プロセッサまたはシリコン スイッチ プロセッサ(それぞれ、自律スイッチングまたはシリコン スイッチング用)を備えた Cisco 7000 シリーズ ルータ、または VIP(分散スイッチング用)を備えた Cisco 7500 シリーズ ルータでのみ利用可能です。

show interfaces stat コマンド

このコマンドは、show interfaces switching コマンドの要約バージョンです。次に、インターフェイスが 1 つの場合の出力例を示します。

 RouterA#show interfaces stat
 Ethernet0 
           Switching path    Pkts In   Chars In   Pkts Out  Chars Out 
                Processor      52077   12245489      24646    3170041 
              Route cache          0          0          0          0 
        Distributed cache          0          0          0          0 
                    Total      52077   12245489      24646    3170041 

show interfaces stat コマンドの出力は、使用可能な設定済みスイッチング パスに応じて、プラットフォームごとに異なります。

show ip nat translations

show ip nat translations コマンドは、ルータ上でアクティブになっている Network Address Translation(NAT; ネットワーク アドレス変換)変換を表示します。アクティブな変換は、それぞれ CPU 割り込みを生成し、ルータの CPU 使用率の合計に影響を与えます。非常に多数の変換が行われると、ルータのパフォーマンスに影響があります。

次に、show ip nat translations コマンドの出力例を示します。

     router#show ip nat translations
     Pro Inside global    Inside local    Outside local    Outside global
     --- 172.16.131.1     10.10.10.1      ---              ---

show align コマンド

このコマンドは、Reduced Instruction Set Computing(RISC)プロセッサベースのプラットフォームでのみ使用できます。これらのプラットフォームの CPU には、アラインメントが誤っているメモリの読み取りまたは書き込みを訂正する機能があります。次に、出力例を示します。

 Alignment data for: 
 4500 Software (C4500-DS40-M), Version mis-aligned RELEASE SOFTWARE (fc1) 
 Compiled Tue 31-Mar-98 15:05 by jdoe

 Total Corrections 33911, Recorded 2, Reads 33911, Writes 0 

 Initial Initial 
 Address Count Access Type Traceback 
 40025F4D 15561 16bit read 0x606F4A7C 0x601C78F8 0x6012FE94 0x600102C0 
 40025F72 18350 32bit read 0x606FB260 0x6013113C 0x600102C0 0x60010988 

show version コマンド

CPU 高負荷の問題を追跡するという目的からすると、このコマンド出力の重要な部分は、Cisco IOS ソフトウェアのバージョン、プラットフォーム、CPU のタイプ、およびルータの稼働時間です。show version コマンドの詳細な説明は、コマンド リファレンスに記載されています。

show log コマンド

このコマンドは、バッファに格納されているログ メッセージの内容を表示します。システム メッセージのロギングについての詳細は、『ルータのトラブルシューティング』設定ガイドの「ログ システムのエラー メッセージ」セクションを参照してください。

定期的にデータを収集するための UNIX シェル スクリプト

この付録では、一定の間隔でルータからデータをキャプチャする簡単なスクリプトについて説明します。このスクリプトのコアは、次の行です。

  (echo "show version") | telnet 192.168.1.1

カッコ内のコマンドがサブシェルで実行され、その出力が Telnet セッションに送られます。show version コマンドおよび show processes cpu コマンドの出力を取得するためのスクリプト例を示します。

     #!/opt/local/bin/bash

     ########################################### 
     # Router's IP address 
     # 
     IP_ADDRESS='10.200.40.53' 
       

     # Directory where the log files will be stored 
     # 
     DIR=/var/log/router 

     ######################################## 

     if [ ! -e $DIR ] 
     then 
       mkdir $DIR 
     fi 

     # Tag specification: mmddhhmm 
     DATE=`date +'%m%d'` 
     TIME=`date +'%H%M'` 
     TAG=$DATE$TIME 

     # Collect data from the router 
     (echo "foo";\ 
     echo "bar";\ 
     echo "term len 0";\ 
     echo "show version";\ 
     echo "show processes cpu";\ 
     echo "term len 15";\ 
     echo "show memory summary";\ 
     echo "q";\ 
     sleep 30)|telnet $IP_ADDRESS > $DIR/info.$TAG 2>$DIR/info.$TAG.msg 

注:このスクリプトでは、パスワードも含めたすべてのデータがクリア テキスト形式で送信されます。

最初のセクションでは、IP アドレスと、ログ ファイルの保存先ディレクトリを指定する必要があります。2 番目のセクションには、ルータに実際に送信するコマンドを記述します。最初がユーザ名、次がパスワード、以降にコマンドを続けます。ここでは、特定のコマンドの最初の出力行のみをキャプチャするためのテクニックが使用されています。プロンプトを介して、端末の長さを短めに設定し(このケースでは 15)、「q」文字を送信しています。

データを定期的に収集すると、問題に定期的な特性があるかどうかが show version コマンドの出力に示されます。たとえば、特定の時間帯や曜日に必ず発生しているかどうかがわかります。さらに多くのコマンドの出力を収集する場合は、上記の例と同じ方法でそれらのコマンドをスクリプトに追加します。ファイルに送信する出力を切り捨てる場合は、最初にカッコ内に sleep コマンドを指定して、スリープ時間を長くします。

CPU 高使用率の問題がたびたび発生するにもかかわらず、短時間で終結する場合は、このスクリプトを 5 分間隔で実行します。そうでない場合は、15 分または 30 分間隔で実行します。簡単に使用するために、このスクリプトを /usr/bin/router-script などのファイルとして保存しておきます。さらに、5 分おきに実行するには、/etc/crontab ファイルに次の行を追加します。

     */5       *       *       *       *       /usr/bin/router-script

cron サーバを再起動します。/etc/crontab ファイルを変更する権限がない場合は、次のように独立したプロセスとしてスクリプトを実行します。

     while [ 1 ]; do ./router-script ; sleep 300; done &

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

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


関連情報


Document ID: 15095