所以,我有 2 个新的 Ubuntu 8.04 JeOS VM 在运行,它们都非常轻量,并且根本没有运行太多程序,没有 Apache、MySQL 等等。但它们却使用了 350M 的 RAM,我不明白为什么。
我已经查看过ps -auxw --sort rss
,但只能看到常规 sshd、bash 等进程正在运行,而且它们根本没有占用太多内存。
top
显示空闲率为 99.6%,因此没有任何占用大量 CPU 的程序在运行。
free -mt
输出:
total used free shared buffers cached
Mem: 503 350 152 0 111 174
-/+ buffers/cache: 64 438
Swap: 471 0 471
Total: 975 350 624
(是的,为了测试目的,它只有 512MB 的 RAM。
编辑:我也有几个运行 Ubuntu 9.04 32 位服务器版本的虚拟机,它们使用 20-30M 的 RAM,并且安装了几乎相同的软件包。
答案1
使用的内存大部分是缓冲区或缓存。根据输出的第二行,实际使用的内存量(用于除缓冲区/缓存以外的其他用途)大约为 64Mb free
。
当应用程序需要时,通常可以清除和使用用于缓存和缓冲区的内存,但是当有备用内存时,内核将使用它来尝试减少 I/O 负载。
您可以使用强制清除大部分缓存和缓冲区sync; echo 3 > /proc/sys/vm/drop_caches
,然后重新运行free
以查看差异。
不是相当这一点并不明确,因为其他东西也会被计入缓冲区或缓存总量,包括tmpfs
文件系统和在某些虚拟化产品中分配给主机的虚拟机内存(尽管这在这里不是问题,因为这是您正在讨论的虚拟机,而不是主机)。请参阅这个问题的答案更详细,因为我已经偏离了这个特定问题的重点。