我有一台带有 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。