このドキュメントでは、EXEC プロセスと仮想 EXEC プロセスについて説明し、これらのプロセスの高い CPU 使用率をトラブルシュートする方法について説明します。
このドキュメントの前に、『Cisco ルータの CPU 使用率が高い場合のトラブルシューティング』を読むことを推奨します。
このドキュメントは、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されたものです。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのような作業についても、その潜在的な影響について確実に理解しておく必要があります。
ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。
Cisco IOS® ソフトウェアでの Exec プロセスは、ルータの TTY 回線(コンソール、補助、非同期)での通信を受け持っています。仮想 Exec プロセスが受け持つのは VTY 回線(Telnet セッション)です。
Exec および仮想 Exec プロセスは優先順位が中程度のプロセスなので、より優先順位の高い(High または Critical)のプロセスがあると、優先順位がより高いプロセスが CPU リソースを獲得します。
router#show process | i CPU|Exec CPU utilization for five seconds: 0%/0%; one minute: 0%; five minutes: 0% PID QTy PC Runtime (ms) Invoked uSecs Stacks TTY Process 22 M* 0 9644 1733 5564 9732/12000 0 Exec 46 ME 80468980 28 6 466610520/12000 66 Virtual Exec
このコマンドの出力についての詳細は、『show processes コマンド』を参照してください。
これらのセッションで大量のデータが送受信されると、Exec プロセスによる CPU 使用率が高まります。
これらの回線では、ルータが単に 1 文字を送信する場合でも CPU リソースが使用されてしまうということが、この原因です。
コンソール(Exec)の場合、ルータでは 1 文字ごとに割り込み使用して転送が行われます。
コンソールの割り込みは、show stacks コマンドの出力で確認できます。
router#show stacks Minimum process stacks: Free/Size Name 11516/12000 Router Init 9404/12000 Init 5520/6000 AIM_MIB_CREATION 5448/6000 RADIUS INITCONFIG 9728/12000 Virtual Exec Interrupt level stacks: Level Called Unused/Size Name 1 23035463 7008/9000 Network interfaces 2 0 9000/9000 Timebase Reference Interrupt 3 0 9000/9000 PA Management Int Handler 6 9791 8892/9000 16552 Con/Aux Interrupt 7 1334963882 8920/9000 MPC860 TIMER INTERRUPT
VTY 回線(仮想 Exec)の場合、Telnet セッションは TCP パケットを作成し、文字を Telnet クライアントに送信する必要があります。
次のリストでは、Exec プロセスで CPU 使用率が高くなる理由を説明しています。
コンソール ポートを経由して限度以上に大量のデータが送信されている。
ルータによって生成されたコンソール メッセージが多すぎることが原因として考えられます。
show debugging コマンドで、ルータで何らかのデバッグが開始されているかどうかを調べます。
ルータでのコンソールロギングを無効にします(logging consoleがありません)。
コンソールに長い出力が表示されているかどうかを確認します(たとえば、show tech-support または show memory)。
Cisco IOS ソフトウェアに不具合がある。
Bug Toolkit(登録 ユーザ専用)を使用して、該当する Cisco IOS ソフトウェア リリースで、同じ症状が出る不具合を調べてください。
exec コマンドが非同期回線と補助回線に対して設定されている。
回線に発信トラフィックのみが存在する場合、この回線用の Exec プロセスを無効化する必要があります。この回線に接続されたデバイス(モデムなど)から不要なデータが送信された場合に、この回線で Exec プロセスが開始されるためです。
ルータがターミナル サーバとして(他のデバイス コンソールへのリバース Telnet に)使用されている場合、これらの他のデバイスのコンソールに接続されている回線に no exec を設定することが推奨されます。コンソールから戻るデータは、CPUリソースを使用するEXECプロセスを開始する可能性があります。
次のリストでは、仮想 Exec プロセスで CPU 使用率が高くなる理由を説明しています。
Cisco IOS ソフトウェアの不具合
Software Bug Toolkit(登録ユーザ専用)を使用して、該当する Cisco IOS ソフトウェア リリースで、同じ症状が出る不具合を調べてください。
Telnet セッションで過剰なデータが送信されています。
Virtual ExecプロセスでCPU使用率が高くなる最も一般的な理由は、ルータからtelnetセッションに過剰なデータが転送されるためです。
これは、その telnet セッションで、大量の出力が出されるコマンド(show tech-support、show memory など)が実行されたときに生じる可能性があります。
各 VTY セッションで転送されるデータの総量は、show tcp コマンドで確認できます。
router#show tcp vty 0
tty66, virtual tty from host 10.48.77.64
Connection state is ESTAB, I/O status: 1, unread input bytes: 1
Local host: 10.48.77.27, Local port: 23
Foreign host: 10.48.77.64, Foreign port: 11006
........
Datagrams (max data segment is 1460 bytes):
Rcvd: 525 (out of order: 0), with data: 53, total data bytes: 87
Sent: 366 (retransmit: 257, fastretransmit: 0), with data: 356, total data bytes:
158187
膨大な Telnet セッションが生じると、仮想 Exec プロセスにより CPU 使用率が高くなります。膨大な Telnet セッションをクリアするには、多くの場合、デバイスをリロードする必要があります。膨大な Telnet セッションをクリアするもう 1 つの方法は、TCP プロセスをクリアすることです。TCPプロセスは、次の出力のようにshow tcp briefコマンドで識別できます。
Router#show tcp brief TCB Local Address Foreign Address (state) 02FA62D0 172.16.152.75.23 dhcp-171-69-104-.3013 ESTAB
上記の出力例では、膨大な Telnet セッションをクリアするために、clear tcp tcb 0x02fa62d0コマンドで TCP プロセス 02FA62D0 をクリアする必要があります。