このドキュメントでは、割り込みによって CPU 使用率が高くなる場合の理由について説明し、トラブルシューティングのヒントとガイドラインを示しています。
このドキュメントに関する固有の要件はありません。
このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
表記法の詳細については、『シスコ テクニカル ティップスの表記法』を参照してください。
割り込みレベルで CPU 使用率が高くなる場合は、割り込みレベルで処理されるパケットが主な原因です。ルータのコンソールまたは補助ポートから文字が出力されると、割り込みが発生します。
Universal Asynchronous Receiver/Transmitter(UART; 汎用非同期送受信器)はルータの処理速度に比べると低速なので、(ルータで多数の tty 回線が使用されていない限り)可能性は低いものの、コンソールまたは補助ポートの割り込みによってルータの CPU 使用率が高くなる可能性があります。
割り込みによって CPU 使用率が高くなる理由には、次のようなものかあります。
この項目が問題になっている可能性があれば、次の項目を確認してトラブルシューティングします。
ルータで Cisco Express Forwarding が動作しているかどうかを次のようにチェックします。
show ip cef summary コマンドを発行して、Cisco Express Forwarding が有効で、実行中であることを確認します。
Cisco Express Forwarding がすべてのインターフェイスのスイッチング パスとして有効になっていることを確認します。この情報は、show cef interface と show ip interface の出力に表示されています。Cisco Express Forwarding が設定されていてもインターフェイスで有効になっていない場合、Cisco Express Forwarding では、そのインターフェイスのカプセル化がサポートされていません。Cisco Express Forwarding が動作していることを確認してください。つまり、show cef not-cef-switched の出力を参照して、パケットが実際に Cisco Express Forwarding を使用してルータでスイッチングされているかどうかをチェックしてください。
show cef drop コマンドおよび show interfaces switching コマンド(これは、キャッシュ ミスを探すために使用する隠しコマンドです)を使用して、Cisco Express Forwarding でパケットが廃棄されていないことを確認します。廃棄されている場合は、『CEF のトラブルシューティング ページ』を参照してください。
いずれかのインターフェイスに長いアクセス リストが設定されていないかを確認します。
一般的な基本ルールとして、10 行を超えるアクセス リストを長いとみなします。
長いアクセス リストを繰り返し参照すると非常に CPU 負荷が高くなります。NetFlow スイッチングが指定されている場合は、フローがすでにキャッシュにあれば、アクセス リストをチェックする必要がありません。そのため、この場合には、NetFlow スイッチングが有効です。NetFlow スイッチングを有効にするには、ip route-cache flow コマンドを発行します。
Cisco Express Forwarding と NetFlow の両方がインターフェイスに設定されている場合は、Cisco Express Forwarding がスイッチングの判断に使用されることに注意してください。
ルータに NetFlow スイッチングが設定されていることを確認します。
show ip cache flow コマンドを発行して、統計情報をチェックします。1 秒当たりの新規フローの数に注目してください。
Cisco Express Forwarding が有効になっていない場合は、Cisco Express Forwarding を有効にしてスイッチングの判断を高速化します。
長いアクセス リストがない場合は、NetFlow スイッチングを無効にしてみます。
アライメント エラーは、読み取りと書き込みのアライメントがずれている場合に発生します。たとえば、2 バイトの偶数倍数ではないメモリ アドレスから 2 バイトを読み取るとアライメント エラーになります。
アライメント エラーは、通常はソフトウェアの不具合によって発生します。このエラーは CPU で訂正されますが、訂正が多くなると、CPU の負荷が高くなります。このタイプのエラーのトラブルシューティングについては、『トラブルシューティング:スプリアス アクセス、アラインメント エラー、スプリアス割り込み』を参照してください。
show interfaces コマンドおよび show interfaces switching(隠し)コマンドの出力には、どのインターフェイスが過負荷になっているかが示されています。これらのコマンドの出力をログ ファイルに保存して後で分析するには、次のステップに従います。
show interfaces の出力をチェックします。インターフェイスの負荷とスロットル(throttle)の数を調べます。デフォルトでは、5 分間の負荷の平均値が表示されます。この間隔を変更するには、load-interval seconds コマンドを実行します。seconds には、負荷の統計情報を計算するために使用するデータの取得時間を秒数で指定します。30 の倍数を指定してください。
スロットルは、過負荷になっているルータをよく示しています。スロットルは、ポートの受信側が使用禁止にされた回数を示しています。これらはバッファまたはプロセッサの過負荷によって発生した可能性があります。割り込みレベルの CPU 使用率も高ければ、スロットルはルータのトラフィックが過負荷になっていることを示しています。
show interfaces switching(隠し)コマンドの出力をチェックして、どのような種類のトラフィック(プロトコルおよびスイッチング パス)が過負荷のインターフェイスを通過しているのかを確認します。特定のインターフェイスでトラフィックの過負荷が激しい場合は、ネットワークのトラフィック フローの再設計またはハードウェアのアップグレードを検討してください。
ネットワーク ループがトラフィック過負荷の理由となっている可能性もあります。ネットワーク トポロジを確認してください。
単一のデバイスが極端に高い率でパケットを生成しているためにルータが過負荷になっている可能性がある場合には、過負荷になっているインターフェイスの設定に ip accounting mac-address {input|output} interface 設定コマンドを追加して、そのデバイスの MAC アドレスを特定できます。
show interfaces [ ] mac-accounting コマンドを発行すれば、収集された情報が表示されます。送信元デバイスの MAC アドレスが分かっている場合、show ip arp コマンドの出力をチェックすれば、それに対応する IP アドレスがわかります。
ルータで稼働している Cisco IOS ソフトウェアのバージョンの不具合が疑われる場合は、Bug Toolkit(登録ユーザ専用)を使用して、同様の環境で同様の症状が発生する不具合がないかをチェックします。
トラフィックがない場合でも、Channel-Associated Signaling(CAS; チャネル対応シグナリング)は引き続き監視されるので、CPU リソースが使用されます。
トラフィックがない場合でも、ATM インターフェイスからは(ATM 標準に従って)ヌル セルが送出されるので、引き続き CPU リソースが使用されます。
PXF から RP へパントされるパケットが多すぎると、RP が過負荷になる場合があります。show pxf accounting summary コマンドを実行すれば、パントされたパケット量と着信パケットの総量を比較できます。パケットが RP にパントされている理由を調べる場合にも、同じコマンドを使用します。この現象の原因は、ソフトウェアの不具合か、PXF でトラフィックがサポートされていないかのいずれかの可能性があります。
CPU プロファイリングは、どこで CPU 時間が消費されているかを判別するための、オーバーヘッドの低い方法です。このシステムは、4 ミリ秒ごとにプロセッサの場所をサンプリングすることによって機能します。メモリのロケーションのカウントは、増加します。この CPU 使用率の根本原因は、CPU プロファイリングで判別されます。
CPU プロファイリングを実行するには、次の手順を実行します。CPU プロファイリングは、高 CPU 使用率が発生している場合に実行する必要があります。
注:これらすべてのコマンドは、イネーブルモードで入力する必要があります
show region の出力をキャプチャして、開始アドレス、終了アドレス、および main:text 領域のサイズを取得します。
show memory statistics の出力をキャプチャして、プロセッサ メモリ内の最大ブロックのサイズをチェックします。
profile task interrupt を実行して、割り込み専用のプロファイリングを設定します。
main:text 領域のサイズと、空きプロセッサ メモリの最大ブロックのサイズを比較してください。理想的には、最大ブロックは main:text より大きい必要があります。
最大ブロックが main:text サイズより小さい場合は、精度を調整してプロファイリングがプロセッサ メモリのブロックを取得できることを確認します。
最大ブロックが main:text 領域より大きい場合、精度 4 を使用します。
最大ブロックが main:text 領域の半分より大きい場合、精度 8 を使用します。
最大ブロックが main:text 領域の 1/4 より大きい場合、精度 10(16 進数表記による 16)を使用します。
注:精度は2の累乗でなければならず、できるだけ小さくなければなりません(4より小さくはありません)
profile を実行してプロファイリングを開始します。
Profile <starting address> <ending address> <granularity value>
開始アドレスと終了アドレスは、ステップ 1 で判別されます。
5 ~ 10 分待ちます。
profile stop を実行して、プロファイリングを停止します。
show profile terse の出力をキャプチャします。
unprofile all を実行して、メモリが解放されていることを確認してください。
このコマンドは、インターフェイス上のアクティブなスイッチング パスを確認する際に使用します。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 シリーズ ルータでのみ利用可能です。 |
このスクリプトは、CPU使用率が75 %を超えたときにflash:CPU_Profileの出力を保存します。
service internal event manager applet High_CPU event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.6 get-type next entry-opge entry-val 75 exit-time 10 poll-interval 5 action 0.1 syslog msg "CPU Utilization is high" action 0.2 cli command "enable" action 0.4 cli command "show log | append flash:CPU_Profile.txt" action 0.5 cli command "show process cpu sorted | append flash:CPU_Profile.txt" action 0.6 cli command "show interfaces | append flash:CPU_Profile.txt" action 1.1 cli command "configure terminal" action 1.2 cli command "profile xxxxxxx yyyyyyyyZ" action 1.3 cli command "profile start" action 2.3 syslog msg "Entering TCLSH" action 2.4 cli command "tclsh" action 2.5 cli command "after 240000" action 2.6 cli command "exit" action 2.9 syslog msg "Exiting TCLSH" action 3.0 cli command "profile stop" action 3.1 cli command "show profile terse | append flash:CPU_Profile.txt" action 3.2 cli command "clear profile" action 3.3 cli command "unprofile all" action 4.1 syslog msg "Finished logging information to flash:CPU_Profile.txt..." action 4.2 cli command "end"
改定 | 発行日 | コメント |
---|---|---|
1.0 |
29-May-2008 |
初版 |