free -m 和 ps -euf 的区别

mam*_*moo 6 memory ps

我有一台带有 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
Run Code Online (Sandbox Code Playgroud)

如果我跑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
Run Code Online (Sandbox Code Playgroud)

因此,进程使用的内存似乎不到 5%,但我只有 6Mb 的可用内存......为什么?

Arc*_*ege 10

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

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

Mem:           496        489          6          0          4        452
-/+ buffers/cache:         33        462
Run Code Online (Sandbox Code Playgroud)

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

因此,实际上,您使用的是 33MB 的内存并且有 462MB 的可用内存 - 可能略少一些,因为您仍然需要一些缓冲区用于 I/O。