目次

はじめに

背景説明

トラブルシューティング

リークの原因となっているアプリケーションの特定

アロケータ PC のデコード

MallocLite メモリの統計情報の調査

MallocLite の無効化

概要

このドキュメントでは、Cisco IOS® ソフトウェア プラットフォームで MallocLite メモリのメモリ リークのトラブルシューティングを行う方法を説明します。

また、Cisco Technical Assistance Center（TAC）サービス リクエストを開いたり、デバイスをリロードしたりする前に、収集する必要のある情報を記します。 このドキュメントで説明されている出力を収集し、TAC サービス リクエストに通知すると、迅速な問題解決に役立ちます。

背景説明

MallocLite は、メモリ マネージャによって小さな固定サイズのメモリ単位を割り当てる機能です。これはチャンクとも呼ばれ、128 バイト以下の単位を割り当てます。 小さな単位のメモリ割り当てなら、割り当てごとにブロック ヘッダーのオーバーヘッドが発生することはありません。 この機能は、プロセッサ メモリ プールのみでサポートされます。

各メモリ ブロック ヘッダーは、約 48 バイトのメモリを占有します。最小のブロックは約 24 バイトを占有します。 Cisco IOS ソフトウェアの従来のアプローチによる割り当てでは、実際のデータの割り当てに 8 バイトしか必要ない場合でも、少なくとも 72（48 + 24）バイトのメモリを消費します。

MallocLite であれば、チャンクを使用することにより、このようなオーバーヘッドを減らすことができます。 ただし、チャンクを管理する必要があるため、オーバーヘッドが完全になくなるわけではありません。 それでも、チャンクは固定サイズであるため、ブロックとは異なる形式で管理され、オーバーヘッドは少なくなります。

MallocLite メモリを使用するアプリケーションは、メモリの空き容量を適切に増やす役割を担います。 また、MallocLite はメモリのユーザを非公開にします。

トラブルシューティング

注: Cisco CLI アナライザ（登録ユーザ専用）は、特定の show コマンドをサポートしています。 show コマンド出力の分析を表示するには、Cisco CLI アナライザを使用します。

リークの原因となっているアプリケーションの特定

malloclite キーワードのみで検索しても、通常は既存のバグを特定することは困難です。

この例では、*MallocLite* プロセスが異常な量のメモリを保持していることを示しています。

#show processes memory sorted

Processor Pool Total:  1614282720  Used:  1544726580  Free:   69556140

I/O Pool Total:  313524224   Used:  115564032   Free:  197960192

PID TTY  Allocated      Freed    Holding    Getbufs    Retbufs Process

0   0          0          0  1476043512         0          0 *MallocLite*

そこで、リークの原因となっているアプリケーションを特定する必要があります。 特定方法として次の 3 つがあります。

- アロケータ PC のデコード。

- MallocLite メモリの統計情報の調査。

- MallocLite の無効化。

アロケータ PC のデコード

MallocLite がオンになっていても、通常はどの機能がメモリを要求しているか確認できます。 レポートされた名前が MallocLite であっても、show memory allocating-process totals コマンドの出力は異なる PC 値を示す場合があります。

#show memory allocating-process totals

<snip>

Allocator PC Summary for: Processor

Displayed first 2048 Allocator PCs only

PC          Total   Count  Name

0x620BE3C4   42807572     594  MallocLite

0x620ADDD4   13597308     193  MallocLite

0x60738BB0    8909824     122  MallocLite

0x620AE0E0    2060716      31  MallocLite

0x620AE10C    1982780      30  MallocLite

Cisco TAC エンジニアは、最大合計を使用してリストの先頭から PC 値をデコードできます。 これは、メモリ リークのあるアプリケーションの特定に役立ちます。

MallocLite メモリの統計情報の調査

Cisco IOS ソフトウェア リリース 15.1T に追加された拡張機能の 1 つに、新しい CLI があります。これは、各 PC によって割り当てられた MallocLite メモリの要約を表示します。 show memory lite-chunks コマンドは、大量の MallocLite ブロックを使用しているアプリケーションを特定することができます。

show memory lite-chunks { statistics | totals } { summary { pool | { all | pool } } }

show memory lite-chunks コマンドの詳細については、コマンド リファレンスを参照してください。

CLI   : show memory lite-chunks totals

DESC  : Summary of all pools, based on alloc pc.

This cli can be used to find the alloc_pc which is using large amount memory

allocated from all mlite pools

CLI   : show memory lite-chunks statistics

DESC  : Displays number of allocated & free mlite chunks

CLI   : show memory lite-chunks summary pool pool

DESC  : Show summary of particular mlite pool

This cli can be used to find the alloc_pc which is using large amount of memory

in individual mlite pool

CLI   : show memory lite-chunks summary pool all

DESC  : Show individual summary of all mlite pools

CLI   : show memory lite-chunks pool pool

DESC  : Show All chunk elements in the specified pool

CLI   : show memory lite-chunks pool all

DESC  : show all chunk elements in all mlite pools

次に、このコマンドからの出力例を示します。

#show memory lite-chunks ?

pool        Malloc lite pool

statistics  Malloc lite statistics

summary     Malloc Lite summary

totals      Malloc Lite Allocating totals

#show memory lite-chunks statistics

Pool       Inuse       Free

8-Bytes         140       1904

20-Bytes         173       1313

44-Bytes         171        791

68-Bytes          24        687

96-Bytes          26        519

128-Bytes          20        410

#show memory lite-chunks totals

PC         Total       Count

26067AE0          2112          33

2269E68C          1932          29

2269FACC          1664          29

2269F964          1664          26

2269FA9C          1580          29

26067FB4          1360          34

23CD2A0C          1036           7

#show memory lite-chunks pool ?

128-Bytes  128 bytes pool

20-Bytes   20 bytes pool

44-Bytes   44 bytes pool

68-Bytes   68 bytes pool

8-Bytes    8 bytes pool

96-Bytes   96 bytes pool

all        all pools

#show memory lite-chunks summary pool 8

8 bytes pool

PC         Total       Count

2269FB10           812          29

23612084           700          25

2269F9F8           700          25

2269F9EC           700          25

この場合も、TAC エンジニアは、最大合計を使用して PC 値をデコードし、メモリ リークが発生しているアプリケーションを特定できます。

MallocLite の無効化

MallocLite 機能はデフォルトで有効になっています。 MallocLite リークを調査するには、MallocLite を無効にします。

(config)#no memory lite

次回のリロードを実行するまで、リークが発生しているメモリは MallocLite の下にあります。 ただし、show processes memory sorted および show memory allocating-process totals コマンドを使用して、その他のリークを監視することもできます。 ここで、リークが実際のプロセスの下に表示されます。

デバイスのメモリがきわめて少ない場合は、設定を保存し、デバイスをリロードしてメモリを解放する必要があります。

#wr

#reload

メモリは時間の経過とともに再度低下する可能性があります。その場合は show processes memory sorted および show memory allocating-process totals コマンドを使用し、その時点からのメモリ使用量を監視します。

注: no memory lite コマンドを使用して MallocLite を事実上無効にし、デバイスをリロードすると、show memory lite-chunks コマンドの出力は空白になります。

memory lite コマンドの詳細については、コマンド リファレンスを参照してください。