Memory
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 的可用記憶體……為什麼?
緩衝區和記憶體是動態調整大小的。如果程序需要更多空間,則從緩衝區和記憶體中獲取。
關鍵是看第二行(“-/+ buffers/cache”)。
Mem: 496 489 6 0 4 452 -/+ buffers/cache: 33 462
請注意,第二行(462)中的空閒是 6(空閒)、4(緩衝區)和 452(記憶體)的總和。這是實際可用空間量。如果這個值太低,那麼系統將開始將程序從記憶體交換到交換空間。
所以實際上,您正在使用 33MB 的記憶體並且有462MB可用- 可能會稍微少一些,因為您仍然需要一些用於 i/o 的緩衝區。