从我读过的所有内容来看,RHEL 将使用所有可用/未使用的 RAM 进行缓存以提高性能。
然而,这在 VMware 环境中对我来说是个问题。VMware (ESX4) 会寻找客户操作系统,让其 (ESX) 知道客户何时使用完内存,以便将其提供给另一台服务器。
假设我有一个带有 dB 的客户端,dB 运行一个密集型作业,作业完成之后,现在处于空闲状态。但由于它缓存了所有内存,VMware 仍然认为 dB 服务器需要它,因此它不会释放 RAM 供需要额外 RAM 的 Web 服务器使用。当然,我可以容纳与 RAM 数量相同的客户端,但这会浪费大量的虚拟化功能,因为总体而言,我的 CPU 利用率低于 10%,而我的 RAM 利用率(就 VMware 所知)为 75%。
有任何想法吗?
答案1
在您的示例中,从数据库服务器虚拟机回收内存的一种机制是VMware Balloon 驱动程序(它是 VMware Tools 的一部分):
This is VMware physical memory management driver which acts
like a "balloon" that can be inflated to reclaim physical pages
by reserving them in the guest and invalidating them in the
monitor, freeing up the underlying machine pages so they can
be allocated to other guests. The balloon can also be deflated
to allow the guest to use more physical memory.
参见“3.3 气球飞行”了解 VMware® ESX Server 中的内存资源管理 (pdf)。
您还可以运行这个小脚本
#!/bin/sh
sync && echo 3 > /proc/sys/vm/drop_caches
在数据库服务器虚拟机中明确地如果您确定不再需要缓存,请释放页面缓存、dentry 和 inode。