2015-12-15 7 views
5

大規模なマルチスレッドサーバーのメモリ使用量を調査しようとしています。 mallinfo()によると、私はarena=350Mfordblks=290Mを得ています。これは、ほとんどのスペースが実際にmalloc()の内部で無駄になっていることを示しています。 malloc_info()関数は、わかりやすいXMLデータ構造を提供します。それでも、誰かが私に説明することができますGNU malloc_info():実際に割り当てられたメモリを取得しますか?

  • ヒープ0は特別ですか?他のすべてが住んでいる主なアリーナですか?
  • <size from=.../>チャンクが割り当てられていますか?
  • <system>要素とは何ですか? mmap()/sbrk()を使用して割り当てられたメモリ?
  • <aspace>要素とは何ですか?使用可能なメモリ?
  • <aspace type="mprotect" .../>についてはどうですか?

ちょうどはじめに、私は、アプリケーションによって割り当てられた総メモリ、つまり解放されていないすべてのメモリをプロットできるようにしたいと考えています(malloc())。

+1

ソースを見ると、すべての 'size'要素と' unordered'要素の 'total'フィールドを合計することで解放され、まだ再利用されていないメモリ(利用可能)の量を計算できることがわかりました。それは私の2番目のポイントに答える。 –

+1

その他のソース解析: ''は 'mallinfo()' 'arena'フィールドと同じです。 –

答えて

1

大量の仮想メモリ使用量は必ずしも問題にはなりません。デフォルトのmalloc実装は、競合の問題を避けるためにスレッドごとに大量のストレージを割り当てます。これは、現在かなり一般的な64ビットの実装で特に発生します。常駐メモリのサイズに問題が発生したり、ページングの問題が発生したりしない限り、心配する必要はありません。

Kevin Grigorenkoは、WebSphereに関連してメモリー使用量を扱ういくつかのブログ投稿を書いていますが、大規模なマルチスレッド・プロセスにも適用できます。

+1

ありがとうございます。私はhttp://files.cnblogs.com/files/hseagle/demo.pdfも見つけました。これはGNU mallocを少し理解するのに役立ちます。 –

関連する問題