我有一个在 VMware 下运行的新系统,我只是想了解内存的使用情况。
在 vSphere 客户端中,它显示正在使用 335,544 KB:
但是,Linux 显示我使用了 3,146,148 KB:
root@PFDEV-SVN:~# free -k
total used free shared buffers cached
Mem: 4118636 3146148 972488 0 477216 1268364
-/+ buffers/cache: 1400568 2718068
Swap: 6040400 0 6040400
这怎么会这么不同呢?难道我理解错了吗?
这是 Ubuntu 9.10,未安装 vmware 工具,在 ESXi 服务器上运行。
答案1
有一个详细的白皮书关于内存管理和活动内存工作集大小计算的主题。
基本上,这一切都归结为这样一个事实:客户机不会一直使用分配给它的所有内存。相反,只有特定范围的内存在特定时间段内被视为“活动”,如果您碰巧过度使用物理内存,则“非活动”内存将成为交换的候选。如果您想将其与主机内的内存使用情况大致匹配,则应该查看“消耗”内存(由于多个虚拟机共享内存页面,可能会出现偏差)。
答案2
人们希望它们不匹配。虚拟化的目的之一是允许多个操作系统驻留在 1 个物理系统上。构建虚拟机管理程序(如 ESX 或 hyper-v)时要注意的一件事是,操作系统通常不会真正使用分配给它们的所有内存。虚拟机管理程序会相应地将该物理内存提供给其他操作系统,从而允许您“过度使用”可用的内存量。过度使用的缺点是,如果您遇到每个操作系统实际使用分配的内存量的情况,性能就会下降。