我对内存数字如何加起来有点困惑。
如果我理解正确的话,“真正”使用的内存量是total - free - buffers - cached。在下面的示例中,这将是 14370248k - 75736k - 178892k - 10459552k = 3656068k,这是总内存 (3656068/14370248) 的 25%。
同样,如果我理解正确的话,RES和%MEM列中显示的数字显示了进程“真正”使用的物理内存量。仅httpd进程的RES值之和为7254m,即7428096k(7254*1024),占总内存(7428096/14370248)的52%。httpd 进程的%MEM值总和为 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
...
Run Code Online (Sandbox Code Playgroud)
httpd 进程可能共享一些内存,因为它们是彼此分叉的。由于写时复制机制,他们都声称该内存是自己的虚拟内存,尽管它只在物理内存中存在一次。
一般来说,Linux 上的内存输出包含此类的各种 bogosities。我不会试图去理解它太多的意义。查看进程的行为是否与应有的行为不同很有用;但这些数字并不一定相加。
| 归档时间: |
|
| 查看次数: |
2977 次 |
| 最近记录: |