1.Xen与Openvz的区别
Xen和Openvz同样是虚拟化主机技术,区别在于Xen是半虚拟化技术,它并不是一个真正的虚拟机,而是相当于自己运行了一个内核的实例,可以自由的加载内核模块,虚拟的内存和IO,稳定而且可预测。Openvz则是操作系统级别的虚拟化技术,是底层操作系统上的一层应用,这意味着易于理解和低权重开销,一般来说也意味着更优的性能。
这里有一个问题,可以看到实际上openvz因为免去了大量的公共开销,理论上来说性能会比xen更好。为什么大家都会认为openvz过分压榨性能呢?我认为是因为openvz配置起来比较灵活,给黑心openvz服务商改低限制的机会。
比如mediatemple,号称512M内存的dv方案,kmemsize才12M,不了解的人看了512M觉得很哈皮啊,可是使用的时候一般这512M能分到你手里一半就不错了。此消彼长,所以才会有xen能更好地利用机器性能的错觉
2.Openvz的内核模型
首先当OpenVZ的主机说“256MB的保证”,它实际上意味着约232MB的“privvmpages”,14M的“kmemsize”和其他杂项资源。当应用程序调用 malloc()分配的内存将被添加到“privvmpages”。
当“privvmpages”超过限制,malloc()将失败并返回一个NULL。当主机服务器内存用光了,然后虚拟环境下的进程超过“oomguarpages”的将被终止。
OpenVZ的内存管理方法既有问题也有优势。最大的问题之一是内存容量的应用程序使用的内存和应用程序实际上分配到的内存是不同的,不同的应用程序他们的差别可能会很大。以Java为例,它通常分配一大块的内存,但是,它可能只使用一小部分分配的内存。如果privvmpages受限,java会立即停止运行。调整参数可以解决一部分问题,但它处理得绝对没有Xen来得干净利落。事实上,几乎所有使用内存分配的应用程序都会受OpenVZ这个问题的影响。
/proc/meminfo 本身也有问题。虽然OpenVZ的已经为内存进行了虚拟,但是用”free”命令依然会返回主机的内存。这样就会使小内存的openvz的vps无法运行诸如java或者gcc编译这样的程序。
OpenVZ的内存模型的优点是, 它容易理解: 你几乎就只有privvmpages受限。与专用的服务器或Xen的服务器不一样的是,你的磁盘高速缓存和页面缓存并不计入您的总内存使用情况。因此,在一个没有过度销售的openvz主机上,由于拥有较大冗余的公共资源,它实际上可能会比同类规格的Xen的VPS表现更佳。
这实际上解答了我关于ramhost为啥那么牛叉的疑惑,因为据我所知ramhost是相当undersale的服务商,从他们的状态日志上可以看到,一般inactive内存都在2G以上,所以性能当然强劲了.
3.Xen的内存模型
Xen的系统模型更容易解释。256MB的Xen的VPS是就像一个256MB的专用服务器-该内存段是预留作VPS专用,没有其他VPS能够使用这部分内存,这就像一个真正的专用服务器。
此外,当内存不足时,VPS会使用Swap。一般每个VPS带有两倍大小的交换分区,当您的应用需要更多的内存,不常使用的页面从内存中被换出到交换分区,从而腾出使更多的房间。因此,256MB的Xen的VPS系统实际上共有768MB内存(256MB内存+ 512MB的交换空间),请相信我,交换空间是非常有用的,特别是处理突发的需求高峰时。
这么说来,Xen是永远远优于OpenVZ?不然,你的256MB的VPS理论可以使用高达768MB内存,而实际上内核,高速缓存,缓冲,他们都占用内存。这部分系统开销也是可观的。另外,Swap会严重降低性能。
4.稳定性和可预测性
当内存耗尽时,xen和openvz表现大相径庭。xen会把不常用的内存页面换入Swap,这将大大降低性能,当Swap也用尽,那么xen的系统会响应得越来越慢,就像一台真实的服务器一样。
而openvz一旦内存用尽,则会突然死亡:开不出新的程序,只能等待系统资源可用。更有甚者,本来运行的好好的程序也可能因为不断增长而超过限制,然后突然死亡。这就像开车开到70码,然后突然撞墙上了,一般会死得很惨。
谁适合使用openvz?
1.对内存极度渴求的应用
2.善于进行内存管理的用户(没内存时直接仆街,没有商量余地)
3.追求性价比的用户(前提是openvz的服务商不是黑心服务商,没有像mediatemple那样做出苛刻的限制,并且最低前提下不oversale它的VPS)
4.更了解linux的用户(openvz因为不够底层,所以很多东西是用不了的,比如pptpd,这就要求用户换用其他更为难用尽管可能也更为强大的软件,比如openvpn)
谁适合使用xen?
1.没有大文件需要处理
2.内存要求不高的应用(或者说很低的应用)
3.对响应时间要求不高的应用(因为内存用尽时响应会非常慢,真的,你试过vi一个文件要等上1分钟么?)
4.看重稳定性多过性能的用户(即使内存用尽,响应很慢,还是会响应)