Guest

ルータ : Cisco 10000 シリーズ ルータ

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

ライター翻訳版 - July 26, 2005
Document ID: 15095
ダウンロード: PDF

目次

概要
前提条件
      要件
      使用するコンポーネント
      表記法
CPU 使用率が高い場合の症状
初期トラブルシューティング
原因の特定と問題の解決
      CPU 高使用率の原因が割り込みにある場合
      CPU 高使用率の原因がプロセスにある場合
詳細情報を取得するためのコマンド
      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 コマンドの出力での高いパーセンテージ表示

    ご使用のシスコ デバイスの、show processes cpu コマンドの出力データがあれば、アウトプットインタープリタを使用して、今後予想される障害や修正を表示できます。 アウトプットインタープリタを使用するには、登録ユーザであり、ログインしていて、さらに 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 に負荷を与えているかをチェックします。 プロセスについて通常とは異なるアクティビティがあれば、ログにエラー メッセージが記録されます。 したがって、まず大量の 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 使用率が高くなる場合のトラブルシューティング」の「他のプロセス」セクション

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

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

ルータがまったくアクセス不能になった場合は、まず、ルータの電源を一旦オフにしてから再度オンにします。 次に、一定間隔で上記のコマンドの出力を収集します。ただし、メッセージのログが syslog サーバに記録される show log コマンドは除外されます。 出力を収集する間隔は 5 分にします。 この UNIX シェル スクリプトを使用すると、データを手動または自動で取得できます。 また、HTTP または SNMP を使用して収集することも可能です。 シスコ ルータで 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 &

関連情報