3

私は新しいサーバー (64 ビット Debian) をセットアップしていましたが、apache プロセスをできるだけ小さくしようとして、不要なモジュールを無効にしました。次に、より多くのモジュールがオンになっている 32 ビット Debian ボックスで、pmap の出力を apache と比較しました。64 ビット マシンで「最適化された」ものは、​​はるかに多くのメモリを消費しているように見えて、非常に驚​​きました。

pmap -d (要約行のみ) は以下を示します。

64bit: mapped: 188584K    writeable/private: 14680K    shared: 72K

32bit: mapped: 33824K    writeable/private: 7304K    shared: 888K

出力をさらに詳しく見ていきます。.so ライブラリのメモリ割り当てに違いがあります。libcを例にとると...

64 ビット:

00007f9988e8d000    1380 r-x-- 0000000000000000 008:00001 libc-2.11.3.so

00007f9988fe6000    2044 ----- 0000000000159000 008:00001 libc-2.11.3.so

00007f99891e5000      16 r---- 0000000000158000 008:00001 libc-2.11.3.so

00007f99891e9000       4 rw--- 000000000015c000 008:00001 libc-2.11.3.so

32ビット:

b7501000    1364 r-x-- 0000000000000000 008:00001 libc-2.7.so

b7656000       4 r---- 0000000000155000 008:00001 libc-2.7.so

b7657000       8 rw--- 0000000000156000 008:00001 libc-2.7.so

したがって、違いは 64 ビット出力の 2 行目です。Mode="-----" を使用したこれらの割り当ての説明が見つかりません。すべての .so には 1 つあるようで、サイズは常に 2044 または 2048 です。

これは 64but マシンでのメモリ割り当てと関係がありますか? RAM 1 GB あたりの proc は、32 ビット マシンよりもかなり少なくなりますか?

4

1 に答える 1

3

さらに調査した結果、pmap 出力のこれらの「-----」2MB 行は実際のメモリ使用量を示すものではなく、パフォーマンス上の理由から 64 ビットでアドレス空間がどのように使用されるかの癖であるというこの記事を最終的に見つけました。与えられた要約は次のとおりです。

「64 ビット Linux で多くの共有ライブラリを使用するアプリケーションは、共有ライブラリごとに、実際に占有するよりも 2MB 多く使用していると報告されています。この追加分は、RAM やスワップ スペースを必要とせず、各プロセス内のアドレス空間だけで十分です。根本的な理由は、ライブラリを効率的に共有できるようにすることですが、実装は少し奇妙です."

64 ビット Linux でプロセスのメモリ使用量がどのように報告されるかについて、この根本的なバグ/機能に関する情報を見つけるのが非常に困難だったとは、いまだに信じられません!

于 2012-02-16T09:27:09.623 に答える