![VMware 是否知道 Linux 内存磁盘缓存?](https://linux22.com/image/1548760/VMware%20%E6%98%AF%E5%90%A6%E7%9F%A5%E9%81%93%20Linux%20%E5%86%85%E5%AD%98%E7%A3%81%E7%9B%98%E7%BC%93%E5%AD%98%EF%BC%9F.png)
在我的VMware环境中的虚拟机被标记为“压力“因为它始终需要大约 75% 的总 RAM。
它是一个 Debian 9 VM,所以我多次连接 SSH 来调查这个问题;我注意到free
命令输出平均显示总共 2 GB 中只有大约 840MB RAM 被使用,另外 1GB 用于 buff/cache。
据我所知,如果需要更多内存,Linux 内核可以回收 buff/cached RAM:VMware vSphere是否了解这种机制,或者 VM 是否存在一些错误配置?
free -h
编辑:这是该虚拟机的命令的典型输出:
total used free shared buff/cache available
Mem: 2.0G 927M 76M 156M 1.0G 772M
Swap: 2.0G 293M 1.7G
答案1
简而言之,VMWare 不知道(或关心)客户机使用 RAM 的用途,只知道客户机正在使用 RAM。客户机正在使用 RAM,即使客户机可以选择不使用它来做某些事情。
VMWare 只关心可供客户机使用的 RAM 总量,尤其是可供其他客户机使用的 RAM 量(当主机 RAM 超额预订时,这一点至关重要)。客户机选择执行(或不执行)的任何缓存/缓冲/交换都是其职责,因此如果您想配置该行为,请在客户机中执行。VMWare 根本不会尝试修改客户的内存管理实践。
如果您希望 VMWare 忽略该框的 RAM 使用情况,我建议您重新配置它的警报。
答案2
我认为 VMware balloon 驱动程序与此相关。如果由于所有这些虚拟机仅将 RAM 用于磁盘缓存而导致虚拟机管理程序的 RAM 不足,则 vmware tools balloon 驱动程序将产生对 RAM 的需求之内VM 本身,迫使 VM OS 减少用于缓存的 RAM 数量,并释放该 RAM 以供虚拟机管理程序在其他地方使用。