ルータ : Cisco 2900 シリーズ サービス統合型ルータ

MallocLite メモリ リークのトラブルシューティング

2015 年 11 月 25 日 - 機械翻訳について
その他のバージョン: PDFpdf | 英語版 (2015 年 4 月 23 日) | フィードバック

概要

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

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

著者:Cisco TAC エンジニア、Michal Stanczyk および David Chen

背景説明

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

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

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

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

トラブルシューティング



このセクションで使用されているコマンドの詳細を調べるには、Command Lookup Tool登録ユーザ専用)を使用してください。

アウトプット インタープリタ ツール登録ユーザ専用)は、特定の show コマンドをサポートしています。 show コマンド出力の分析を表示するには、アウトプット インタープリタ ツールを使用してください。

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

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 コマンドの詳細については、コマンド リファレンスを参照してください。


関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


Document ID: 117517