我已经有一个测试 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
因此,您可以看到物理内存已全部使用,但它被用作缓存内存,我认为这通常很好,因为如果应用程序需要它,它将被释放。
我运行了在这个答案中找到的 shell 脚本,它列出了 3 个qemu-kvm
进程。
为我配置了服务器,只为交换分配了 2GB 的逻辑卷,通常我喜欢匹配高达 8GB 的物理内存。
是否值得扩展交换逻辑卷或添加单独的交换卷?
这在 KVM 中很常见吗?这不是我在其他 KVM 主机上看到的东西,所以我需要调整一个特定的设置吗?
还有其他意见/建议吗?
这个是正常的。空闲虚拟机使用的页面将被交换,内存将用于缓存。您可以将swappiness设置为零,这可能会以性能为代价(较小的缓存)阻止像这样使用交换。
这是 Red Hat 的建议(有许多 YMMV):
此示例未考虑内核同页合并 (KSM),这将减少使用的内存量。
这里 RH 说 4G 交换主机,但这里他们建议 12G * 0.5 = 6G 交换给你。
如果您是 KVM 新手,我建议您阅读 IBM 的KVM 最佳实践文档。
根据我的经验,不,不值得分配额外的交换。您将使用交换 (HDD) 作为 RAM,并将 RAM 作为缓存(HDD 的快捷方式)....听起来大多适得其反。通常在具有 8GB RAM 的系统上,我将分配 1-2GB 交换空间,通常是 raid 分区方案的其余部分。例子:
3x64GB SSD(操作系统/软件 Raid0) 2x1TB SATA(数据 Raid1)
我将在 /boot 上将我的第一个 SSD 设置为 1GB,在将其余驱动器进行相同分区后浪费了 2x1GB。听起来像是 Raid0 上的交换,而且通常无论如何都无法访问它。
至于 KVM,我会查看错误报告以及对各个客户机进行故障排除。两者都可能存在内存泄漏吗?