【发布时间】:2012-02-15 16:37:34
【问题描述】:
我正在设置一个新服务器(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。
这与 64 位机器上的内存分配有关吗?与 32 位机器相比,我每 GB RAM 获得的 procs 真的会少得多吗?
【问题讨论】:
-
典型的 64 位程序会为代码使用更多内存,因为指令(操作码)可能更长,而立即数可能更长。基本上,内存中的每个指针都将使用两倍于 32 位的字节。
-
@ydroneaud 你说的有些道理,但我没有解释非常大的差异。
标签: linux memory-management pmap