我已经运行了一个星期左右的 CentOS KVM 测试主机,上面有 3 个 CentOS 客户机。有 12GB 的物理 RAM,其中大约 7.5GB 实际分配给了虚拟机。这些虚拟机甚至还没有被使用,因为服务器仍处于测试阶段,但我注意到交换使用量在过去 24-48 小时内一直在攀升。现在看起来已经耗尽了。
以下是输出free
# free -m
total used free shared buffers cached
Mem: 11905 11749 155 0 81 4632
-/+ buffers/cache: 7035 4869
Swap: 2047 2047 0
所以正如您所看到的,物理内存全部被使用,但它被用作缓存内存,我认为这通常是没问题的,因为如果应用程序需要它,它就会被释放。
我运行了在这个答案其中列出了 3 个qemu-kvm
流程。
服务器为我配置了仅 2GB 的逻辑卷用于交换,而我通常喜欢将物理内存匹配到 8GB。
是否值得扩展交换逻辑卷或添加单独的交换卷?
这在 KVM 中很常见吗?我在其他 KVM 主机上没有看到过这种情况,所以我需要调整某个特定设置吗?
还有其他意见或建议吗?
答案1
这是正常的。空闲虚拟机使用的页面将被交换,内存将用于缓存。您可以设置交换性为零,这可能会阻止像这样使用交换,但会降低性能(减小缓存)。
这是 Red Hat 的推荐(可能存在许多 YMMV):
交换空间的计算方法如下:
计算所有客户机所需的内存量 - 在此示例中:(50 个客户机 * 每个客户机 1GB 内存)= 50GB
将客户机内存量添加到主机操作系统所需的量以及主机最小交换空间 - 在此示例中:50GB 客户机内存 + 4GB 主机操作系统 + 4GB 最小交换 = 58GB
从系统物理 RAM 数量中减去该数量 - 在此示例中为 58GB - 32GB = 26GB
答案是需要分配的交换空间量。本例中为 26GB
此示例没有考虑内核同页合并(KSM),这将减少使用的内存量。
这里 RH 说要为主机交换 4G,但是这里他们建议您交换 12G * 0.5 = 6G。
如果你是 KVM 新手,我建议你阅读 IBM 的KVM 的最佳实践文档。
答案2
根据我的经验,不,不值得分配额外的交换。您将使用交换(HDD)作为 RAM,将 RAM 作为缓存(HDD 的快捷方式)……听起来大多适得其反。通常在具有 8GB RAM 的系统上,我会分配 1-2GB 交换,通常是 raid 分区方案的剩余部分。示例:
3x64GB SSD(操作系统/软件 Raid0)2x1TB SATA(数据 Raid1)
我将把第一个 SSD 设置为 /boot 上的 1GB,在对其余驱动器进行相同分区后,将浪费 2x1GB。听起来像是 Raid0 上的交换,而且通常无论如何都不会被访问。
至于 KVM,我会查看错误报告并对各个客户机进行故障排除。其中是否存在内存泄漏?