KVM虚拟机内存超配后-虚拟机内存减半现象分析及解决

现象:

cloudstack4.3,4.4版本,使用kvm虚拟机时,如果配置了内存超用,会发现创建的虚拟机内存为计算方案的一半。

分析:

配置完超配系数为2以后,创建虚拟机,打开虚拟机(计算方案为2C/2G)的xml配置文件如下:

  <name>i-2-32-VM</name>
  <uuid>eb1a307f-ff54-4f40-aa88-d6071535cd92</uuid>
  <description>CentOS 5.5 (64-bit)</description>
  <memory unit=‘KiB‘>2097152</memory>
  <currentMemory unit=‘KiB‘>1048576</currentMemory>

可以看到,虚拟机中实际显示的为currentMemory(minRam),即为当前内存为1G。

但memory unit实际为最大使用内存(maxRam)。

可以看到,2G实际被定义为虚拟机的maxRam,但实际分配为minRam,即看到的减半现象。

解决:

1.编辑agent配置文件,添加参数“vm.memballoon.disable=true”

[[email protected] agent]# cat /etc/cloudstack/agent/agent.properties | grep memballoon 
vm.memballoon.disable=true

2.重启libvirtd和cloudstack-agent服务。

3.关闭,并重新启动虚拟机。

关于vm.memballoon.disable=true的解释:

# vm.memballoon.disable=true
# Disable memory ballooning on vm guests for overcommit, by default overcommit  feature enables balloon and sets currentMemory to a minimum value.
时间: 2024-12-28 14:47:08

KVM虚拟机内存超配后-虚拟机内存减半现象分析及解决的相关文章

nginx和Tomcat集成后发生的重定向问题分析和解决

nginx和Tomcat集成后发生的重定向问题分析和解决 Tomcat前端配置一个HTTP服务器应该是大部分应用的标配了,基本思路就是所有动态请求都反向代理给后端的Tomcat,HTTP服务器来处 理静态请求,包括图片.js.css.html以及xml等.这样可以让你的应用的负载能力提高很多,前端这个HTTP服务器主流用的最多的当属 Apache HTTP Server和nginx.今天这篇文章主要讲解的是这种组合的方式的前提下,后端的Tomcat中的app在301跳转的时候遇到的一个问题. 问

vmware虚拟机安装Windows 7后虚拟机自动挂起

vmware虚拟机安装windows7后在一段时间中没有操作,虚拟机会自动挂起,是因为windows7中的设置的自动睡眠,打开[控制面板]=>[电源选项]=>[选择关闭显示器时间]将下面两个选项设置为[从不]: 原文地址:https://www.cnblogs.com/alonely/p/9688091.html

openstack如何设置cpu和内存的超配比例

默认OpenStack的CPU超配比例是1:16,内存超配比例是1:1.5.下面配置的就是这个比例,你可以自己算一下,cat /proc/cpuinfo里面的逻辑核数,再x16就是你能够分配给虚拟机的.内存也是类似. 配置文件nova.conf中修改了如下参数 #cpu_allocation_ratio=16.0   #ram_allocation_ratio=1.5 当然了,这个值其实是给nova-scheduler看的,人家来决定,你有没有资源创建虚拟机,以及创建在哪个节点上. 原文地址:h

Java内存区域 - 深入Java虚拟机读后总结

Java虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,有各自的创建时间和销毁时间,有的区域随着虚拟机进程的启动而存在,有的区域则是依赖用户线程的启动和结束进行建立或销毁.Java虚拟机第二版规定,虚拟机管理的内存包含以下几个运行时数据区域 程序计数器:程序计数器(Program Counter Register)是一块较小的内存空间,作用可以理解为是当前线程所执行的字节码的行号指示器.Java虚拟机的多线程是通过线程切换以及分配处理器执行时间来

笔记本装VMware虚拟机,卸载后,内存释放不了,非页面缓冲池占用大量内存

管理员运行CMD命令,输入(直接复制粘贴)sc config ndu start= disabled,因为微软ndu驱动导致的内存泄漏.也有可能是虚拟机卸载不干净导致的.也可能是程序bug. 仅供尝试,我当时卸载虚拟机后非页面缓冲池占用内存1.6G,开机内存直接占用50%,考虑重装系统还要装一大堆软件麻烦,就尝试所有搜索得来的办法,死马当活马医,居然成功了!

Java虚拟机(JVM)中的内存设置详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步. PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance. GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很

深入理解Java虚拟机之读书笔记一 自动内存管理机制

一.运行时数据区域 1.程序计数器是线程的私有空间,每个线程都有.针对线程执行的是Java代码还是Native代码有两种取值,Java代码时:虚拟机字节码指令的地址:Native代码时:计数值为Undefined.不可能出现OutOfMemeoryError情况. 2.Java虚拟机栈是线程的私有空间,每个线程都有.栈中局部变量表的部分是在编译期间完成分配的,每个局部变量空间的大小为32为长度.栈的深度太长,抛出StackOverflowError异常.栈可扩展时,如果内存不够,会抛出OutOf

《深入理解Java虚拟机》笔记02:Java内存区域与内存溢出异常

1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间: 有的区域随着虚拟机进程的启动而存在 有些区域则依赖用户线程的启动和结束而建立和销毁 根据<Java虚拟机规范(Java SE 7版)>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示. 1.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的

《深入理解Java虚拟机》笔记 第三章 内存分配与回收策略

几条主要的最普遍的内存分配规则: ? ? 1.对象优先在Eden分配 ? 大多数情况下,对象在新生代的Eden区中分配. ? ? 当Eden区没有足够的空间进行分配时,虚拟将发起一次Minor GC,如果GC后新生代中存活的对象无法全部放入Survivor空间,则需要通过分配担保机制提前进入到老年代中,前提是老年代中不能容纳所有存活对象,即只能容纳部分. ? ? 则未能进入到老年代的存活对象将继续分配在Eden区中 ? ? 如果Eden区也还未能容纳剩余的存活对象虚拟机抛出OutOfMemory