3

我正在设置一个新服务器(64 位 Debian),并试图使 apache 进程尽可能小,禁用任何我不需要的模块。然后,我将 pmap 输出与 32 位 Debian 机器上的 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位输出中的第二行。对于 Mode="-----" 的分配,我找不到任何解释,每个 .so 似乎都有一个,并且大小始终为 2044 或 2048。

这与 64but 机器上的内存分配有关吗?与 32 位机器相比,每 GB RAM 获得的 procs 真的会少得多吗?

4

1 回答 1

3

经过更多研究,我终于找到了这篇文章,它说 pmap 输出中的这些“-----” 2MB 行并不表示实际内存使用情况,而是出于性能原因在 64 位上如何使用地址空间的怪癖。给出的总结是:

“据报道,在 64 位 Linux 上具有大量共享库的应用程序使用的每个共享库比它们实际占用的多 2MB。这额外不会花费您任何 RAM 或交换空间,只需要每个进程中的地址空间,这是充足的“在 64 位平台上提供。根本原因是为了保持库的有效共享,但实现有点奇怪。”

我仍然很难相信很难找到有关如何在 64 位 Linux 上报告进程内存使用情况的基本错误/功能的信息!

于 2012-02-16T09:27:09.623 回答