我有一个使用kvm和virt-manager来处理虚拟机的pipe理程序。
pipe理程序有6GB的内存。
如果我添加一个新的虚拟机,我不知道有多less内存仍然是免费的。
至lessvirt-manager对话框不显示它:
有没有一种工具可以帮助我find匹配的最大值?
例:
以上只是一个简单的例子。 在我们的真实服务器上,我们有更多的虚拟主机。
我怕给虚拟主机留下太多内存。 如果虚拟机pipe理程序太less,会导致性能严重受影响。 如果我给“主机二”4GB,那么pipe理程序就会“着火”,因为它“没有空气”。
有没有一个工具可以帮助我确定有多less内存可用?
正如您关于过度使用内存的Redhat文档所说,
“在KVMpipe理程序上运行的客户虚拟机没有分配给它们的专用物理RAM块,而是每个客户虚拟机都作为一个Linux进程,在那里主机物理机器的Linux内核只在请求时分配内存。
不幸的是,这使得确定可以/应该分配给每个主机的RAM有多less模糊的整个情况。 您可以使用一种工具来查看虚拟机之间分配的内存是virsh和freecell命令。
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
再次:想法如何改善,欢迎!