限制 Xen Dom0 的内存

今年来的新人比较多,每个人都需要至少两个 Xen 虚拟机做项目,一个 Linux 一个 Windows,去年升级到 16GB 内存的服务器都显得资源很紧张,今天 VPSee 给新来的人分配虚拟机的时候居然发现内存不够用。Xen 运行一段时间后,dom0 就会吃掉几乎所有可用内存(这是 Linux 的特点,把多余的内存用来做缓存),这时候如果要新建一个 Xen 虚拟机的话就造成内存分配不足的错误:

# xm create vm01
Using config file "./vm01".
Error: (12, 'Cannot allocate memory')

解决的办法很容易,就是在 Xen 内核启动的时候加上 dom0_mem=512M 参数限制,这样 dom0 最多只能使用 512MB 的内存。当然可以根据自己情况来决定给 dom0 分配多少内存,如果不确定的话,这篇 “应该给 Xen Dom0 和 DomU 配置多大内存?” 可能会有帮助。

# vi /etc/grub.conf
default=0
timeout=2
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-164.11.1.el5xen)
        root (hd0,0)
        kernel /xen.gz-2.6.18-164.11.1.el5 dom0_mem=512M
        module /vmlinuz-2.6.18-164.11.1.el5xen ro root=LABEL=/
        module /initrd-2.6.18-164.11.1.el5xen.img

评论 (11 Comments)

  1. 对博主的公司很好奇,应该是世界500强企业吧。

  2. 对你的这个命令好像有问题的,正确的写法是写在 module /vmlinuz-2.6.18-164.11.1.el5xen ro root=LABEL=/ 后面吧

  3. 刚刚检查了一下,是在 kernel 后面,因为是给 xen kernel 传参数。

  4. 是给xen的参数,当然写在xen后;
    Debian安装xen后的menu.lst里面有一行:
    # xenhopt=
    在这里加上dom0_mem=256M,update-grub后就自动生成相似的启动参数了。

  5. 发现了,如果不限制dom0内存,在刚开机时没有运行什么程序也没开domU,内存就吃掉2G多:
    http://lists.xensource.com/archives/html/xen-users/2010-04/msg00064.html
    限制domU后就好了。
    我用Debian Squeeze amd64加上Intel i5集成显卡,如果dom0_mem小于2G将不能启动X,BIOS里面调整Shared Memory也没用。于是dom0_mem=8192M(实际物理内存大小)就可以解决两方面问题。

  6. 原来是这样设置,终于知道了

  7. 您好,vpsee,我按照您的方法在后kernel后面相应位置添加dom0_mem=512M mem=64G,然后update-grub后,仍然提示Panic on CPU0: Not enough RAM for domain 0 allocation。我把dom0_mem=512M换成dom0_mem=386M后,报的是too small,无法启动,这该怎么办。。。
    是不是我电脑的原因:我电脑是2g内存,i5的处理器。

  8. vpsee,您好!我通过xen命令xm mem-set 0 ***,设置Domain-0的内存大小,我想设置大点,因为服务器还有其他程序在跑,不想让虚拟域无穷地占用我的内存空间。可是我这么设置之后,在创建一个大内存虚拟机还是成功了,Domain-0内存也相应的变小了。
    有什么好的解决方法吗?

  9. 你说的是kvm吧,xen对内存的管理本来就是很规整的,不会多占用1M的内存,何来把内存吃完

  10. 如果不严格限制 dom0 的内存的话,时间长了以后 dom0 会慢慢占用所有可用内存(虽然这部分内存可以回收),坏处是,这时候如果需要创建新的 domu,xen 会先回收内存再创建,创建速度会慢。

  11. 你好,请问你对xen的缓存机制熟悉吗?xen的hypervisor层缓存是怎么样的?

发表评论