OpenVZ是基于Linux内核的操作系统级别虚拟化技术,由于OpenVZ并没有在宿主机环境中虚拟出一个完整的VPS硬件环境,因此在完全等同的测试环境下,OpenVZ的效率比同类软件高,但由于是操作系统级别的虚拟化技术,因此对环境也有更多的限制。
用非常浅显易懂的语言描述OpenVZ架构VPS虚拟机的特点:
1、OpenVZ是基于Linux操作系统内核的虚拟化技术,因此只能在OpenVZ虚拟化技术只能虚拟Linux系统。
2、只有有限的、特殊定制的Linux系统能够作为VPS的操作系统,也就是说,此虚拟化技术不能运行Windows操作系统。
3、宿主机中划分出一个目录,当做VPS的整个磁盘,并且宿主机根据磁盘配额限制这个目录的大小。因此,如果提供商给你“划分”了30G的磁盘空间,宿主机是不需要真真正正的30G可用空间的。
4、相同的道理,宿主机给虚拟机“划分”了512M的内存空间,当VPS开机时,并不会完全“独占”宿主机的512M内存,而是需要多少用多少,只是不能超过限制而已。这种内存分配方式就给服务商的“超售”带来了可能。何谓超售?传送《警惕VPS服务商超售常用伎俩》
5、接上,由于服务商给你分配的512M内存只是概念上的,因此,真正能分给你使用的内存,取决于这个服务商的口碑。
6、如下一段文字很好的描述了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表现更佳。
7、OpenVZ由于其本身虚拟化技术的限制,即便是对于Linux系统,也有很多涉及内核的功能无法正常使用,比如PPTP协议的VPN、iptables防火墙的部分功能等无法正常使用。
8、OpenVZ架构的Linux是没有Swap分区的,你也不能对磁盘进行分区等操作。
9、OpenVZ有比较明显的优点:同等条件下(不超售),OpenVZ的开销小于XEN架构,并且性能略高于XEN;磁盘空间只是个数字上的限制而已,如果想升级VPS空间,或者减少空间,无需对磁盘做任何调整即可实现。内存同理。OpenVZ上运行的代码都是直接运行于宿主机的,没有虚拟化的开销。