メモリ リーク ディテクタ
メモリ リーク ディテクタ機能は、Cisco IOS ソフトウェアを実行しているルータのメモリ リークを検出するために使用できるツールです。メモリ リーク ディテクタ機能は、すべてのメモリ プール、パケット バッファ、およびチャンクのリークを検出できます。
メモリ リーク ディテクタの機能の履歴
|
|
12.3(8)T1 |
この機能が導入されました。 |
12.2(25)S |
この機能は、Cisco IOS Release 12.2(25)S に統合されました。 |
プラットフォームおよび Cisco IOS ソフトウェア イメージのサポート情報の入手方法
Cisco Feature Navigator を使用すると、プラットフォームおよび Cisco IOS ソフトウェア イメージの各サポート情報を検索できます。 http://www.cisco.com/go/fn にある Cisco Feature Navigator にアクセスしてください。アクセスには、Cisco.com のアカウントが必要です。アカウントを持っていないか、ユーザ名またはパスワードが不明な場合は、ログイン ダイアログボックスの [Cancel] をクリックし、表示される指示に従ってください。
メモリ リーク ディテクタについて
メモリ リーク ディテクタの機能を使用する前に、次の概念を理解しておく必要があります。
• 「メモリ リーク」
• 「メモリ リークの検出」
メモリ リーク
メモリ リークは、有用な目的をまったく果たさない、メモリのスタティック割り当てまたはダイナミック割り当てです。スタティックに割り当てられたメモリ間でのリーク検出に使用できるテクノロジーがありますが、このマニュアルでは、ダイナミックに行われるメモリ割り当てに焦点を当てます。
メモリ リークの検出
検出の観点から、ダイナミックに割り当てられたメモリ ブロック間のリークは、次の 3 つのタイプに分類できます。
• タイプ 1 のリークにはリファレンスがありません。メモリのこれらのブロックにはアクセスできません。
• タイプ 2 のリークは割り当ての 1 つ以上のサイクルに含まれますが、このサイクル内のどのブロックにもサイクル外からはアクセスできません。各サイクル内のブロックは、サイクル内の他の要素へのリファレンスを持ちます。タイプ 2 のリークの例として、今では必要とされない循環リストがあります。個別の要素は到達可能ですが、循環リストは到達可能ではありません。
• タイプ 3 のリークはアクセス可能または到達可能ですが必要でなく、たとえば、今では必要とされないデータ構造の要素が該当します。タイプ 3 のリークのサブクラスには、割り当ては行われますが書き込みは決して行われません。 show memory debug reference unused コマンドを使用して、このサブクラス リークを探索できます。
メモリ リーク ディテクタ機能により、タイプ 1 およびタイプ 2 のメモリ リークを検出するテクノロジーが提供されます。
メモリ リーク ディテクタ機能は、次の 2 つのモードで動作します。
• ノーマル モード:メモリ リーク ディテクタはメモリを使用して動作を高速化します。
• ロー メモリ モード:メモリ リーク ディテクタは、メモリの割り当てを試行せずに実行します。
ロー メモリ モードはノーマル モードよりもかなり低速で、ブロックだけしか処理できません。ロー メモリ モードではチャンクがサポートされません。ロー メモリ モードは、ルータの使用可能なメモリが少ない場合、またはない場合に役立ちます。
メモリ リーク ディテクタは簡単なインターフェイスを備えており、いつでも Command Line Interface(CLI; コマンドライン インターフェイス)から呼び出してメモリ リークのレポートを取得できます。テスト用途の場合は、すべてのテストを実行した後、メモリ リーク ディテクタを呼び出してリークに関するレポートを取得できます。テストのときだけに生成されるリークだけが重要となる場合、メモリ リーク ディテクタには、テスト開始時にイネーブルにされるインクリメンタル オプションがあります。テストの終了後、インクリメンタル オプションがイネーブルにされた後に発生したリークだけのレポートを取得できます。
偽りのアラームを減らすには、メモリ リーク ディテクタを複数回呼び出して、すべてのレポートで一貫して表示されるリークだけをリークとして解釈することが必要です。これは特に、パケット バッファ リークの場合に当てはまります。
(注) メモリ リーク ディテクタのレポートに基づく障害を連絡する場合は、障害レポートのアトリビュート フィールドに「メモリ リーク検出」と記入してください。
警告 重大なメモリ リークの問題があるデバイス上でメモリ リーク検出コマンドを発行すると、接続が失われる場合があります。
メモリ リーク ディテクタの使用方法
ここでは、次の各手順について説明します。
• 「メモリ リーク情報の表示」
• 「メモリ デバッグのインクリメンタル開始時刻の設定」
• 「メモリ リーク情報の段階的な表示」
メモリ リーク情報の表示
次の作業は、検出されたメモリ リークの情報を表示する方法を示します。
手順の概要
1. enable
2. show memory debug leaks [ chunks | largest | lowmem | summary ]
手順の詳細
|
|
|
ステップ 1 |
enable
Router> enable |
特権 EXEC モードをイネーブルにします。 • プロンプトが表示されたら、パスワードを入力します。 |
ステップ 2 |
show memory debug leaks または show memory debug leaks [ chunks ] または show memory debug leaks [ largest ] または show memory debug leaks [ lowmem ] または show memory debug leaks [ summary ]
Router# show memory debug leaks または
Router# show memory debug leaks chunks または
Router# show memory debug leaks largest または
Router# show memory debug leaks lowmem または
Router# show memory debug leaks summary |
ノーマル モードでメモリ リーク検出を実行して、検出されたメモリ リークを表示します。チャンク内のメモリ リークは検出されません。 または (任意)ノーマル モードでメモリ リーク検出を実行して、チャンク内の検出されたメモリ リークを表示します。 または (任意)メモリ リーク検出を実行して、上位 10 のリークの allocator_pcs、およびリークしたメモリの合計量を表示します。さらに、このコマンドが実行されるたびに、以前の実行時のレポートが呼び出されて、現在の実行のレポートと比較されます。 または (任意)ロー メモリ モードでメモリ リーク検出を実行して、検出されたメモリ リークを表示します。分析にかかる時間は、ノーマル モードの場合よりもかなり長くなります。このコマンドの出力は、 show memory debug leaks コマンドと類似しています。 または (任意)ノーマル モードでメモリ リーク検出を実行して、検出されたメモリ リークを allocator_pc に基づいて表示した後、ブロックのサイズに基づいて表示します。 |
show memory debug leaks コマンドのサンプル出力
次に、 show memory debug leaks コマンドにオプション キーワードを指定しない場合の出力例を示します。
Router# show memory debug leaks
Address Size Alloc_pc PID Name
Address Size Alloc_pc PID Name
Address Size Alloc_pc PID Name
62DABD28 80 60616750 -2 Init
62DABD78 80 606167A0 -2 Init
62DCF240 88 605B7E70 -2 Init
62DCF298 96 605B7E98 -2 Init
62DCF2F8 88 605B7EB4 -2 Init
62DCF350 96 605B7EDC -2 Init
63336C28 104 60C67D74 -2 Init
63370D58 96 60C656AC -2 Init
633710A0 304 60C656AC -2 Init
63B2BF68 96 60C659D4 -2 Init
63BA3FE0 32832 608D2848 104 Audit Process
63BB4020 32832 608D2FD8 104 Audit Process
表 1 に、この出力で表示される重要なフィールドについて説明します。
表 1 show memory debug leaks のフィールドの説明
|
|
Address |
リークされたブロックの 16 進数のアドレス。 |
Size |
リークされたブロックのサイズ(バイト単位)。 |
Alloc_pc |
ブロックに割り当てられたシステム コールのアドレス。 |
PID |
ブロックに割り当てられたプロセスのプロセス ID。 |
Name |
ブロックに割り当てられたプロセスの名前。 |
show memory debug leaks chunks コマンドのサンプル出力
次に、 show memory debug leaks chunks コマンドからの出力例を示します。
Router# show memory debug leaks chunks
Address Size Alloc_pc PID Name
Address Size Alloc_pc PID Name
Address Size Alloc_pc PID Name
62DABD28 80 60616750 -2 Init
62DABD78 80 606167A0 -2 Init
62DCF240 88 605B7E70 -2 Init
62DCF298 96 605B7E98 -2 Init
62DCF2F8 88 605B7EB4 -2 Init
62DCF350 96 605B7EDC -2 Init
63336C28 104 60C67D74 -2 Init
63370D58 96 60C656AC -2 Init
633710A0 304 60C656AC -2 Init
63B2BF68 96 60C659D4 -2 Init
63BA3FE0 32832 608D2848 104 Audit Process
63BB4020 32832 608D2FD8 104 Audit Process
62D80DA8 16 62D7BFD0 (Managed Chunk )
62D80DB8 16 62D7BFD0 (Managed Chunk )
62D80DC8 16 62D7BFD0 (Managed Chunk )
62D80DD8 16 62D7BFD0 (Managed Chunk )
62D80DE8 16 62D7BFD0 (Managed Chunk )
62E8FD60 216 62E8F888 (IPC Message He)
表 2 に、この出力で表示される重要なフィールドについて説明します。
表 2 show memory debug leaks chunks のフィールドの説明
|
|
Address |
リークされたブロックの 16 進数のアドレス。 |
Size |
リークされたブロックのサイズ(バイト単位)。 |
Alloc_pc |
ブロックに割り当てられたシステム コールのアドレス。 |
PID |
ブロックに割り当てられたプロセスのプロセス ID。 |
Name |
ブロックに割り当てられたプロセスの名前。 |
Size |
(チャンク要素)リークされた要素のサイズ(バイト)。 |
Parent |
(チャンク要素)リークされたチャンクの親チャンク。 |
Name |
(チャンク要素)リークされたチャンクの名前。 |
show memory debug leaks largest コマンドのサンプル出力
次に、 show memory debug leaks largest コマンドからの出力例を示します。
Router# show memory debug leaks largest
608D2848 32776 inconclusive
608D2FD8 32776 inconclusive
60C656AC 288 inconclusive
次に、 show memory debug leaks largest コマンドの 2 回目の実行からの出力例を示します。
Router# show memory debug leaks largest
show memory debug leaks summary コマンドのサンプル出力
次に、 show memory debug leaks summary コマンドからの出力例を示します。
Router# show memory debug leaks summary
Alloc PC Size Blocks Bytes What
Alloc PC Size Blocks Bytes What
Alloc PC Size Blocks Bytes What
0x605B7E70 0000000032 0000000001 0000000032 Init
0x605B7E98 0000000040 0000000001 0000000040 Init
0x605B7EB4 0000000032 0000000001 0000000032 Init
0x605B7EDC 0000000040 0000000001 0000000040 Init
0x60616750 0000000024 0000000001 0000000024 Init
0x606167A0 0000000024 0000000001 0000000024 Init
0x608D2848 0000032776 0000000001 0000032776 Audit Process
0x608D2FD8 0000032776 0000000001 0000032776 Audit Process
0x60C656AC 0000000040 0000000001 0000000040 Init
0x60C656AC 0000000248 0000000001 0000000248 Init
0x60C659D4 0000000040 0000000001 0000000040 Init
0x60C67D74 0000000048 0000000001 0000000048 Init
表 3 に、この出力で表示される重要なフィールドについて説明します。
表 3 show memory debug leaks summary のフィールドの説明
|
|
Alloc PC |
ブロックに割り当てられたシステム コールのアドレス。 |
Size |
リークされたブロックのサイズ。 |
Blocks |
リークされたブロックの数。 |
Bytes |
リークされたメモリの合計量。 |
What |
ブロックを所有するプロセスの名前。 |
メモリ デバッグのインクリメンタル開始時刻の設定
次の作業は、メモリ リークのインクリメンタル分析の開始時刻を設定する方法を示します。インクリメンタル分析の場合は、 set memory debug incremental starting-time コマンドを使用して開始点を定義します。開始時刻が設定されると、開始時刻以降に割り当てられたメモリだけがリークとしてレポートされる対象になります。
手順の概要
1. enable
2. set memory debug incremental starting-time
手順の詳細
|
|
|
ステップ 1 |
enable
Router> enable |
特権 EXEC モードをイネーブルにします。 • プロンプトが表示されたら、パスワードを入力します。 |
ステップ 2 |
set memory debug incremental starting-time
Router# set memory debug incremental starting-time |
インクリメンタル分析の開始時刻をコマンドが発行される時刻に設定します。 |
メモリ リーク情報の段階的な表示
次の作業は、開始時刻が確定された後のメモリ リーク情報を表示する方法を示します。
手順の概要
1. enable
2. set memory debug incremental starting-time
3. show memory debug incremental { allocations | leaks [ lowmem ] | status }
手順の詳細
|
|
|
ステップ 1 |
enable
Router> enable |
特権 EXEC モードをイネーブルにします。 • プロンプトが表示されたら、パスワードを入力します。 |
ステップ 2 |
set memory debug incremental starting-time
Router# set memory debug incremental starting-time |
インクリメンタル分析の開始時刻をコマンドが発行される時刻に設定します。 |
ステップ 3 |
show memory debug incremental allocations または show memory debug incremental leaks または show memory debug incremental leaks lowmem または show memory debug incremental status
Router# show memory debug incremental allocations または
Router# show memory debug incremental leaks または
Router# show memory debug incremental leaks lowmem または
Router# show memory debug incremental status |
set memory debug incremental starting-time コマンドの発行後に割り当てられたすべてのメモリ ブロックを表示します。表示されるメモリ ブロックは単なるメモリ割り当てであり、必ずしもリークとは限りません。 または set memory debug incremental starting-time コマンドの発行後にリークされたメモリだけを表示することを除き、 show memory debug leaks コマンドと類似した出力を表示します。 または メモリ リーク検出を強制的にロー メモリ モードで動作させます。このコマンドの出力は、 set memory debug incremental starting-time コマンドの発行後にリークされたメモリだけを表示することを除き、 show memory debug leaks コマンドと類似しています。 • ロー メモリ モードでは、分析時間がノーマル モードよりもかなり長くなります。 • (ノーマル モードでのメモリ リーク検出呼び出し時の失敗経験などによって)ノーマル モードでのメモリ リーク検出が失敗することがすでにわかっている場合にこのコマンドを使用できます。 または インクリメンタル分析の開始点が設定されて、その後、時間が経過しているかどうかを表示します。 |
show memory debug incremental allocations コマンドのサンプル出力
次に、 show memory debug incremental コマンドを allocations キーワードを指定して入力した場合の出力例を示します。
Router# show memory debug incremental allocations
Address Size Alloc_pc PID Name
62DA4E98 176 608CDC7C 44 CDP Protocol
62DA4F48 88 608CCCC8 44 CDP Protocol
62DA4FA0 88 606224A0 3 Exec
62DA4FF8 96 606224A0 3 Exec
635BF040 96 606224A0 3 Exec
63905E50 200 606A4DA4 69 Process Events
show memory debug incremental status コマンドのサンプル出力
次に、 show memory debug incremental コマンドを status キーワードを指定して入力した場合の出力例を示します。
Router# show memory debug incremental status
Incremental debugging is enabled
Time elapsed since start of incremental debugging: 00:00:10
その他の関連資料
メモリ リーク ディテクタに関する関連資料については、次の各項目を参照してください。
規格
|
|
この機能によりサポートされた新規標準または改訂標準はありません。またこの機能による既存標準のサポートに変更はありません。 |
-- |
MIB
|
|
この機能によってサポートされる新しい MIB または変更された MIB はありません。またこの機能による既存 MIB のサポートに変更はありません。 |
選択したプラットフォーム、Cisco IOS リリース、および機能セットの MIB を検索してダウンロードする場合は、次の URL にある Cisco MIB Locator を使用します。 http://www.cisco.com/go/mibs |
RFC
|
|
この機能によりサポートされた新規 RFC または改訂 RFC はありません。またこの機能による既存 RFC のサポートに変更はありません。 |
-- |
コマンド リファレンス
次に示すコマンドは、このモジュールに記載されている機能または機能群において、新たに導入または変更されたものです。これらのコマンドの詳細については、『 Cisco IOS Configuration Fundamentals Command Reference 』( http://www.cisco.com/en/US/docs/ios/fundamentals/command/reference/cf_book.html )を参照してください。すべての Cisco IOS コマンドの詳細については、 http://tools.cisco.com/Support/CLILookup にある Command Lookup Tool を使用するか、または『 Cisco IOS Master Commands List 』を参照してください。
• set memory debug incremental starting-time
• show memory debug incremental
• show memory debug leaks
Cisco and the Cisco Logo are trademarks of Cisco Systems, Inc. and/or its affiliates in the U.S. and other countries. A listing of Cisco's trademarks can be found at www.cisco.com/go/trademarks . Third party trademarks mentioned are the property of their respective owners. The use of the word partner does not imply a partnership relationship between Cisco and any other company. (1005R)
このマニュアルで使用している IP アドレスは、実際のアドレスを示すものではありません。マニュアル内の例、コマンド出力、および図は、説明のみを目的として使用されています。説明の中に実際のアドレスが使用されていたとしても、それは意図的なものではなく、偶然の一致によるものです。
© 2007 Cisco Systems, Inc.
All rights reserved.
Copyright © 2007-2011, シスコシステムズ合同会社.
All rights reserved.