我对于内存数字如何累加有点困惑。
如果我理解正确的话,“真正”使用的内存量是全部的-自由的-緩衝器-缓存。在下面的例子中,该值为 14370248k - 75736k - 178892k - 10459552k = 3656068k,占总内存的 25% (3656068/14370248)。
再次,如果我理解正确的话,可再生能源和%内存列显示进程“实际”使用的物理内存量。总和可再生能源仅 httpd 进程的值就为 7254m,即 7428096k (7254*1024),占总内存 (7428096/14370248) 的 52%。%内存httpd 进程的值为 53%,足够接近。
为什么摘要部分显示只使用了 25% 的内存,而 httpd 进程单独声称使用了超过 50% 的内存?我这里遗漏了什么?
top - 15:37:00 up 117 days, 18:27, 6 users, load average: 4.82, 4.44, 3.60
Tasks: 433 total, 4 running, 429 sleeping, 0 stopped, 0 zombie
Cpu(s): 59.6%us, 6.5%sy, 0.0%ni, 33.0%id, 0.1%wa, 0.0%hi, 0.8%si, 0.0%st
Mem: 14370248k total, 14294512k used, 75736k free, 178892k buffers
Swap: 8388600k total, 116k used, 8388484k free, 10459552k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3566 mysql 21 0 554m 60m 4576 S 74.6 0.4 11422:52 mysqld
23305 apache 15 0 327m 27m 3792 S 3.2 0.2 0:01.30 httpd
23474 apache 15 0 327m 27m 3800 S 3.2 0.2 0:01.09 httpd
...
答案1
httpd 进程可能共享一些内存,因为它们彼此分叉。由于写时复制机制,它们都声称该内存是自己的虚拟内存,尽管它在物理内存中只存在一次。
一般来说,Linux 上的内存输出包含各种此类虚假信息。我不会试图过多地理解它。查看进程的行为是否与应有的行为不同很有用;但数字不一定相加。