Hierarchical Navigation |
目次概要前提条件 要件 使用するコンポーネント 表記法 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 サポート コミュニティ - 特集対話 関連情報 概要このドキュメントでは、Cisco ルータで CPU 使用率が高い場合の一般的な症状と原因について説明し、トラブルシューティングのガイドラインとソリューションを示しています。 前提条件要件Cisco ルータで CPU の使用率が高い場合のトラブルシューティングを行うには、Cisco IOS(R) ソフトウェアのスイッチング パスを理解しておく必要があります。Cisco IOS ソフトウェアのスイッチング パスについての詳細は、『パフォーマンス チューニングに関する基本事項』を参照してください。 使用するコンポーネントこのドキュメントは、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。 表記法ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。 CPU 使用率が高い場合の症状次のリストは、CPU 使用率が高い場合の一般的な症状を示しています。これらの症状のいずれかが見られる場合は、このドキュメントのトラブルシューティング手順に従って問題を軽減させてください。
初期トラブルシューティング上記のいずれかの症状に遭遇した場合は、次のようにします。
原因の特定と問題の解決show processes cpu コマンドを使用して、CPU の使用率が高くなっている原因が割り込みにあるか、プロセスにあるかをチェックします。 CPU 高使用率の原因が割り込みにある場合詳細は、『割り込みによって CPU 使用率が高くなる場合のトラブルシューティング』を参照してください。割り込みによって CPU 使用率が高くなる原因が CEF のパケット交換による可能性が高い場合、CPU の使用率によるルータ パフォーマンスへの影響はありません。 CPU 高使用率の原因がプロセスにある場合どのプロセスが CPU に負荷を与えているかをチェックします。プロセスについて通常とは異なるアクティビティがあれば、ログにエラー メッセージが記録されます。したがって、まず大量の CPU サイクルを消費しているプロセスに関連するエラーがないかどうかを show logging exec コマンドの出力でチェックします。 またデバッグは、プロセスによる CPU の高使用率をトラブルシューティングするために非常に役立ちます。ただし、デバッグを行うことで CPU 使用率がより高くなるため、デバッグを実行する際には細心の注意が必要です。安全で有用なデバッグを行うには、これらの前提条件を満たす必要があります。
『プロセスによって CPU 使用率が高くなる場合のトラブルシューティング』には、IP パケットのデバッグ セッション例が示されています。 特定のプロセスでの 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 次の表に、このヘッダーのフィールドの説明を示します。
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 出力には、そのインターフェイスで設定されているすべてのプロトコルのスイッチング パスがリストされるため、ルータを通過しているトラフィックの種類と量が簡単にわかります。次の表に、出力フィールドの説明を示します。
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 translationsshow 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 & Cisco サポート コミュニティ - 特集対話関連情報
Document ID: 15095
|