free -m 和 ps -euf 之间的区别

free -m 和 ps -euf 之间的区别

我有一台 ubuntu 10.04 和 512Mb RAM 的 vps 机器。我试图猜测运行 mongodb 守护进程后有多少内存可用。

如果我跑步free -m我会得到

             total       used       free     shared    buffers     cached
Mem:           496        489          6          0          4        452
-/+ buffers/cache:         33        462
Swap:          511          4        507

如果我跑步ps euf我会得到

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       948  0.0  0.0   5928   472 tty6     Ss+  Aug25   0:00 /sbin/getty 384
root       947  0.0  0.0   5928   472 tty5     Ss+  Aug25   0:00 /sbin/getty 384
root       946  0.0  0.0   5928   472 tty4     Ss+  Aug25   0:00 /sbin/getty 384
root       945  0.0  0.0   5928   472 tty3     Ss+  Aug25   0:00 /sbin/getty 384
root       944  0.0  0.0   5928   472 tty2     Ss+  Aug25   0:00 /sbin/getty 384
root       943  0.0  0.1  51856   536 hvc0     Ss   Aug25   0:00 /bin/login -- 
root       978  0.0  0.4  20580  2424 hvc0     S    Aug25   0:01  \_ -bash TERM=
root      7593  0.0  0.1  10332   524 hvc0     T    Aug25   0:00      \_ nano he
root     12576  0.7  3.1 122520 16220 hvc0     Sl   07:42   0:12      \_ ./mongo
root     12599  0.0  0.2  16300  1060 hvc0     R+   08:09   0:00      \_ ps euf

所以看起来进程使用的内存不到 5%,但我只有 6Mb 的可用内存...为什么?

答案1

缓冲区和高速缓存的大小是动态调整的。如果进程需要更多空间,则从缓冲区和高速缓存中获取。

关键是看第二行(“-/+ buffers/cache”)。

Mem:           496        489          6          0          4        452
-/+ buffers/cache:         33        462

请注意,第二行中的空闲 (462) 是 6(空闲)、4(缓冲区)和 452(缓存)的总和。这是实际的可用空间量。如果这个值太低,那么系统将开始将内存中的进程交换到交换空间。

所以实际上,您正在使用 33MB 内存并且有可用的462MB - 可能稍微少一点,因为您仍然需要一些 I/O 缓冲区。

答案2

除了正确的解释通过阿尔切另外,你的解释中还隐藏着另外两个误解ps euf

  1. 该命令ps euf不会列出所有进程 - 您应该使用ps axeuf它。

  2. 如您所见,给出了每个进程的已用内存百分比,四舍五入为0.1%。因此,将它们相加会给出错误的结果 - (大致)所有进程都使用一些内存——即使它还少0.1%。例如,如果有 20 个进程使用0.05%,那么它们加起来就是1%,而不是0%

相关内容