内容

概要

前提条件

要件

使用するコンポーネント

表記法

割り込みによって CPU 使用率が高くなる場合に考えられる原因

不適切なスイッチング パス

CPU によるアライメントの訂正

ルータ トラフィックの過負荷

ソフトウェアの不具合

ルータ上に設定されている音声ポート

ルータ上のアクティブな Asynchronous Transfer Mode（ATM）インターフェイス

RP に対する多数の Parallel Express Forwarding（PXF）パント

CPU プロファイリング

show interfaces switching コマンド

使用率の高い CPU のプロファイリングを取得するサンプル スクリプト

関連情報

概要

このドキュメントでは、割り込みによって CPU 使用率が高くなる場合の理由について説明し、トラブルシューティングのヒントとガイドラインを示しています。

前提条件

要件

このドキュメントに特有の要件はありません。

使用するコンポーネント

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

このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期（デフォルト）設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。

表記法

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

割り込みによって CPU 使用率が高くなる場合に考えられる原因

割り込みレベルで CPU 使用率が高くなる場合は、割り込みレベルで処理されるパケットが主な原因です。ルータのコンソールまたは補助ポートから文字が出力されると、割り込みが発生します。

Universal Asynchronous Receiver/Transmitter（UART; 汎用非同期送受信器）はルータの処理速度に比べると低速なので、（ルータで多数の tty 回線が使用されていない限り）可能性は低いものの、コンソールまたは補助ポートの割り込みによってルータの CPU 使用率が高くなる可能性があります。

割り込みによって CPU 使用率が高くなる理由には、次のようなものかあります。

- ルータで不適切なスイッチング パスが設定されている

- CPU でアライメントの訂正が行われている

- ルータのトラフィックが過負荷になっている

- ルータで動作している Cisco IOS(R) ソフトウェアに不具合がある

- ルータに音声ポートが設定されている

- ルータにアクティブな Asynchronous Transfer Mode（ATM）インターフェイスがある

- PXF から Route Processor（RP; ルート プロセッサ）にパントされているパケットが多すぎる

不適切なスイッチング パス

この項目が問題になっている可能性があれば、次の項目を確認してトラブルシューティングします。

- ルータで Cisco Express Forwarding が動作しているかどうかを次のようにチェックします。

- ip cef グローバル設定コマンドの設定を確認します。

- 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 スイッチングを無効にしてみます。

CPU によるアライメントの訂正

アライメント エラーは、読み取りと書き込みのアライメントがずれている場合に発生します。たとえば、2 バイトの偶数倍数ではないメモリ アドレスから 2 バイトを読み取るとアライメント エラーになります。

アライメント エラーは、通常はソフトウェアの不具合によって発生します。このエラーは CPU で訂正されますが、訂正が多くなると、CPU の負荷が高くなります。このタイプのエラーのトラブルシューティングについては、『トラブルシューティング：スプリアス アクセス、アラインメント エラー、スプリアス割り込み』を参照してください。

ルータ トラフィックの過負荷

show interfaces コマンドおよび show interfaces switching（隠し）コマンドの出力には、どのインターフェイスが過負荷になっているかが示されています。これらのコマンドの出力をログ ファイルに保存して後で分析するには、次のステップに従います。

1. terminal length 0 コマンドを発行します。

2. show interfaces の出力をチェックします。インターフェイスの負荷とスロットル（throttle）の数を調べます。デフォルトでは、5 分間の負荷の平均値が表示されます。この間隔を変更するには、load-interval seconds コマンドを実行します。seconds には、負荷の統計情報を計算するために使用するデータの取得時間を秒数で指定します。30 の倍数を指定してください。

スロットルは、過負荷になっているルータをよく示しています。スロットルは、ポートの受信側が使用禁止にされた回数を示しています。これらはバッファまたはプロセッサの過負荷によって発生した可能性があります。割り込みレベルの CPU 使用率も高ければ、スロットルはルータのトラフィックが過負荷になっていることを示しています。

3. show interfaces switching（隠し）コマンドの出力をチェックして、どのような種類のトラフィック（プロトコルおよびスイッチング パス）が過負荷のインターフェイスを通過しているのかを確認します。特定のインターフェイスでトラフィックの過負荷が激しい場合は、ネットワークのトラフィック フローの再設計またはハードウェアのアップグレードを検討してください。

4. ネットワーク ループがトラフィック過負荷の理由となっている可能性もあります。ネットワーク トポロジを確認してください。

単一のデバイスが極端に高い率でパケットを生成しているためにルータが過負荷になっている可能性がある場合には、過負荷になっているインターフェイスの設定に 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 リソースが使用されます。

ルータ上のアクティブな Asynchronous Transfer Mode（ATM）インターフェイス

トラフィックがない場合でも、ATM インターフェイスからは（ATM 標準に従って）ヌル セルが送出されるので、引き続き CPU リソースが使用されます。

RP に対する多数の Parallel Express Forwarding（PXF）パント

PXF から RP へパントされるパケットが多すぎると、RP が過負荷になる場合があります。show pxf accounting summary コマンドを実行すれば、パントされたパケット量と着信パケットの総量を比較できます。パケットが RP にパントされている理由を調べる場合にも、同じコマンドを使用します。この現象の原因は、ソフトウェアの不具合か、PXF でトラフィックがサポートされていないかのいずれかの可能性があります。

CPU プロファイリング

CPU プロファイリングは、どこで CPU 時間が消費されているかを判別するための、オーバーヘッドの低い方法です。このシステムは、4 ミリ秒ごとにプロセッサの場所をサンプリングすることによって機能します。メモリのロケーションのカウントは、増加します。この CPU 使用率の根本原因は、CPU プロファイリングで判別されます。

CPU プロファイリングを実行するには、次の手順を実行します。CPU プロファイリングは、高 CPU 使用率が発生している場合に実行する必要があります。

注：イネーブルモードでは、これらのコマンドをすべて入力する必要があります

1. show region の出力をキャプチャして、開始アドレス、終了アドレス、および main:text 領域のサイズを取得します。

2. show memory statistics の出力をキャプチャして、プロセッサ メモリ内の最大ブロックのサイズをチェックします。

3. profile task interrupt を実行して、割り込み専用のプロファイリングを設定します。

4. main:text 領域のサイズと、空きプロセッサ メモリの最大ブロックのサイズを比較してください。理想的には、最大ブロックは main:text より大きい必要があります。

最大ブロックが main:text サイズより小さい場合は、精度を調整してプロファイリングがプロセッサ メモリのブロックを取得できることを確認します。

最大ブロックが main:text 領域より大きい場合、精度 4 を使用します。

最大ブロックが main:text 領域の半分より大きい場合、精度 8 を使用します。

最大ブロックが main:text 領域の 1/4 より大きい場合、精度 10（16 進数表記による 16）を使用します。

注：精度は2の累乗でなければならず、できる限り小さくする必要があります（4以下）

5. profile を実行してプロファイリングを開始します。

Profile <starting address> <ending address> <granularity value>

開始アドレスと終了アドレスは、ステップ 1 で判別されます。

6. 5 ～ 10 分待ちます。

7. profile stop を実行して、プロファイリングを停止します。

8. show profile terse の出力をキャプチャします。

9. unprofile all を実行して、メモリが解放されていることを確認してください。

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 シリーズ ルータでのみ利用可能です。

使用率の高い CPU のプロファイリングを取得するサンプル スクリプト

このスクリプトは、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"

関連情報

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

- テクニカル サポートとドキュメント – Cisco Systems