Cisco IOS Configuration Fundamentals コンフィギュレーション ガイド
メモリ リーク ディテクタ
メモリ リーク ディテクタ
発行日;2012/02/25 | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 3MB) | フィードバック

目次

メモリ リーク ディテクタ

この章の構成

メモリ リーク ディテクタについて

メモリ リーク

メモリ リークの検出

メモリ リーク ディテクタの使用方法

メモリ リーク情報の表示

メモリ デバッグのインクリメンタル開始時刻の設定

メモリ リーク情報の段階的な表示

その他の関連資料

関連資料

規格

MIB

RFC

シスコのテクニカル サポート

コマンド リファレンス

メモリ リーク ディテクタ

メモリ リーク ディテクタ機能は、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
 
Adding blocks for GD...
 
PCI memory
Address Size Alloc_pc PID Name
 
I/O memory
Address Size Alloc_pc PID Name
 
Processor memory
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
 
Adding blocks for GD...
 
PCI memory
Address Size Alloc_pc PID Name
 
Chunk Elements:
Address Size Parent Name
 
I/O memory
Address Size Alloc_pc PID Name
 
Chunk Elements:
Address Size Parent Name
 
Processor memory
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
 
Chunk Elements:
Address Size Parent Name
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
 
Adding blocks for GD...
 
PCI memory
Alloc_pc total leak size
 
I/O memory
Alloc_pc total leak size
 
Processor memory
Alloc_pc total leak size
608D2848 32776 inconclusive
608D2FD8 32776 inconclusive
60C656AC 288 inconclusive
60C67D74 48 inconclusive
605B7E98 40 inconclusive
605B7EDC 40 inconclusive
60C659D4 40 inconclusive
605B7E70 32 inconclusive
605B7EB4 32 inconclusive
60616750 24 inconclusive
 

次に、 show memory debug leaks largest コマンドの 2 回目の実行からの出力例を示します。

Router# show memory debug leaks largest
 
Adding blocks for GD...
 
PCI memory
Alloc_pc total leak size
 
I/O memory
Alloc_pc total leak size
 
Processor memory
Alloc_pc total leak size
608D2848 32776
608D2FD8 32776
60C656AC 288
60C67D74 48
605B7E98 40
605B7EDC 40
60C659D4 40
605B7E70 32
605B7EB4 32
60616750 24
 

show memory debug leaks summary コマンドのサンプル出力

次に、 show memory debug leaks summary コマンドからの出力例を示します。

Router# show memory debug leaks summary
 
Adding blocks for GD...
 
PCI memory
 
Alloc PC Size Blocks Bytes What
 
I/O memory
 
Alloc PC Size Blocks Bytes What
 
Processor memory
 
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
 

その他の関連資料

メモリ リーク ディテクタに関する関連資料については、次の各項目を参照してください。

関連資料

関連項目
参照先

その他のコマンド:complete コマンド構文、コマンド モード、デフォルト、使用上の注意事項、例

Cisco IOS Configuration Fundamentals and Network Management Command Reference, Release 12.3 T

規格

規格
タイトル

この機能によりサポートされた新規標準または改訂標準はありません。またこの機能による既存標準のサポートに変更はありません。

--

MIB

MIB
MIB リンク

この機能によってサポートされる新しい MIB または変更された MIB はありません。またこの機能による既存 MIB のサポートに変更はありません。

選択したプラットフォーム、Cisco IOS リリース、および機能セットの MIB を検索してダウンロードする場合は、次の URL にある Cisco MIB Locator を使用します。

http://www.cisco.com/go/mibs

RFC

RFC
タイトル

この機能によりサポートされた新規 RFC または改訂 RFC はありません。またこの機能による既存 RFC のサポートに変更はありません。

--

シスコのテクニカル サポート

説明
リンク

TAC のホームページには、3 万ページに及ぶ検索可能な技術情報があります。製品、テクノロジー、ソリューション、技術的なヒント、およびツールへのリンクもあります。Cisco.com に登録済みのユーザは、このページから詳細情報にアクセスできます。

http://www.cisco.com/public/support/tac/home.shtml

コマンド リファレンス

次に示すコマンドは、このモジュールに記載されている機能または機能群において、新たに導入または変更されたものです。これらのコマンドの詳細については、『 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