机房好多服务器做的是xen虚拟化,突然有天发现用free -m 查出来的内存与服务器的真实内存大小相差很多。。找了很多资料,对比了好几台虚拟化的服务器,才发现是做了虚拟化以后内核的问题
****** 服务器的真实内存如果是小于等于32G,那么做了xen虚拟化以后,宿主机内存加上虚拟机内存约等于真实的物理内存,一切都正常着。
*********如果服务器的物理内存是大于32G以上的(比如64G),宿主机最多只能识别到32G。
宿主机内存加上虚拟机内存还是小于真实服务器内存。。
从官方文档找到了原因:
***********
*******
The Red Hat Enterprise Linux Virtualization kernel does not support more than 32GB of memory for x86_64 systems. If you need to boot the virtualization kernel on systems with more than 32GB of physical memory installed, you must you must append the kernel command line with mem=32G. This example shows how to enable the proper parameters in the grub.conf file:
红帽企业版Linux虚拟内核在x86_64系统上不支持超过32GB的存储。如果你需要安装超过32GB的物理内存来启动系统的虚拟化内核,你必须要添加内核命令行:mem=32G。这个例子展示了如何在grub.conf文件中修改适当的参数:
grub.conf
title Red Hat Enterprise Linux Server (2.6.18-4.elxen)
root (hd0, 0)
kernel /xen.gz-2.6.18-4-el5 mem=32G
module /vmlinuz -2.6.18-4.el5xen ro root=LABEL=/
module /initrd-2.6.18-4.el5xen.img
*********这种改动方法没有实践过。。。服务器上都跑着业务。。,没敢弄。
http://www.centos.org/docs/5/html/Virtualization-en-US/ch-virt-hw-support.html (官方地址)