virt-manager:分配可用的内存

我有一个使用kvm和virt-manager来处理虚拟机的pipe理程序。

pipe理程序有6GB的内存

如果我添加一个新的虚拟机,我不知道有多less内存仍然是免费的。

至lessvirt-manager对话框不显示它:

在这里输入图像说明

有没有一种工具可以帮助我find匹配的最大值?

例:

  • 总共6 GB的主机内存
  • 2 GB给主机“主机一”
  • ? GB用于主机“host-two”。

以上只是一个简单的例子。 在我们的真实服务器上,我们有更多的虚拟主机。

我怕给虚拟主机留下太多内存。 如果虚拟机pipe理程序太less,会导致性能严重受影响。 如果我给“主机二”4GB,那么pipe理程序就会“着火”,因为它“没有空气”。

有没有一个工具可以帮助我确定有多less内存可用?

正如您关于过度使用内存的Redhat文档所说,

“在KVMpipe理程序上运行的客户虚拟机没有分配给它们的专用物理RAM块,而是每个客户虚拟机都作为一个Linux进程,在那里主机物理机器的Linux内核只在请求时分配内存。

不幸的是,这使得确定可以/应该分配给每个主机的RAM有多less模糊的整个情况。 您可以使用一种工具来查看虚拟机之间分配的内存是virshfreecell命令。

virsh的手册页指出freecell,“打印机器上或NUMA单元内的可用内存量。freecell命令可以根据指定的选项,在机器上提供三种不同的可用内存显示之一。 “。

对于基于KVM的虚拟机pipe理程序,可以在terminal中使用虚拟机shell命令( virsh )进入虚拟shell程序 – 提示符应该从其默认值更改为virsh # 。 然后,您可以使用list命令在pipe理程序上显示虚拟机的列表。

要显示每个虚拟机的内存量(通过list命令显示的数字),使用:

 virsh # freecell <cell_number> 

您也可以传递--all标志而不是单元号,以显示为每个VM和整个机器分配的内存量。

这应该给你一个好主意你正在使用的内存总量和多less分配给每个虚拟机。 如果您决定要更改分配的内存量,virsh还会提供setmem命令来更改来宾域的内存分配。 它与virt-manager提供的接口相似,但提供了更多的select和灵活性。 你可以用man virshfind所有的命令选项和描述。

如果你想要真正安全,不要过度使用内存,另一种方法是在你的主机上启用巨大的页面,让你的虚拟机使用它们。 缺点是你真的需要有你需要的所有内存 – 主机内存和虚拟机内存将基本上分开。

如果禁用匿名巨大页面(使用transparent_hugepages=never启动),则可以更好地控制页面的使用情况,然后可以根据需要指定大量的页面(默认情况下,使用default_hugepagesz=2M hugepagesz=2M hugepages=2560 5GB的内存和1GB的主机操作系统)。

您还需要将其添加到您的VM定义。

 <memoryBacking> <hugepages/> </memoryBacking> 

并回答你的问题,如果你使用巨大的页面,“多less内存”将通过grep ^Huge /proc/meminfo回答。 下面是一个为VM预留60G的示例,大约还有600MB可用。

 > grep ^Huge /proc/meminfo HugePages_Total: 30000 HugePages_Free: 304 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 

这是我的hacky版本。 想法如何改善,欢迎:

列出每个VM需要的kiB内存量:

 hypervisor5:~ # for dom in $(virsh list --all --name); do echo $(virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p') $dom ; done| sort -n 524288 testfoo 2146304 x131 3121152 y114 3121152 foo 4096000 y123 4194304 mac-test 6144000 x123 

VM使用的RAM的总和

 hypervisor5:~ # for dom in $(virsh list --all --name); do virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$/\1/p' ; done| awk '{s+=$1} END {print s}' 23347200 

可用物理虚拟机:

 hypervisor5:~ # cat /proc/meminfo | grep MemTotal MemTotal: 24797436 kB 

运行虚拟机的操作剩下多less钱:

 hypervisor5:~ # python -c 'print 24797436-23347200' 1450236 (kiB) 

pipe理程序没有多less

再次:想法如何改善,欢迎!