Memory

free -m 和 ps -euf 的區別

  • March 18, 2019

我有一台帶有 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 的可用記憶體……為什麼?

緩衝區和記憶體是動態調整大小的。如果程序需要更多空間,則從緩衝區和記憶體中獲取。

關鍵是看第二行(“-/+ buffers/cache”)。

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

請注意,第二行(462)中的空閒是 6(空閒)、4(緩衝區)和 452(記憶體)的總和。這是實際可用空間量。如果這個值太低,那麼系統將開始將程序從記憶體交換到交換空間。

所以實際上,您正在使用 33MB 的記憶體並且有462MB可用- 可能會稍微少一些,因為您仍然需要一些用於 i/o 的緩衝區。

引用自:https://unix.stackexchange.com/questions/19560