【虚拟化技术 01】一台物理机怎么变出几十台 VPS?KVM、容器、Docker 一次讲清

同样标着 1核1G,有的 VPS 快如闪电,有的慢如老牛,还有人装 Docker 直接报错。用大白话讲清 VMware、Xen、OpenVZ、KVM 到 Docker 的演进史,搞懂超卖和邻居效应的坑,学会看商家页面的虚拟化类型。

很多人第一次买 VPS 时都栽过同一个跟头:货比三家,挑了个最便宜的"1核1G",买回来装个网站,慢得跟牛拉车一样;想跑个 Docker,直接给你报错装不上;更气人的是,隔壁同款配置的朋友,用起来却飞快。同一个价格、同一张配置单,差距咋就这么大?答案藏在一个很少有人注意的细节里:这台 VPS 是用什么虚拟化技术切出来的。这篇文章就带你把这件事彻底看明白。

延伸阅读

更多相关攻略推荐:【双11黑五 02】2026 黑五 VPS 前瞻总攻略:五大厂商规律【VPS 进阶玩法精选 029】BuyVM (FranTech) 评【双11黑五 01】双 11 买 VPS 避坑 + 蹲券全攻略(20几块钱就能玩一年?NAT VPS(共享 IP 小鸡)原理、端口映射与疯狂的"周期律":内存(RAM)的价格波动与服务器成本变迁

为什么要在物理机上"再造"电脑?

时间倒回 1999 年以前,服务器的用法非常原始:一台物理机装一个操作系统、跑一个业务。一台动辄几万块的服务器,可能就为了跑个小论坛,CPU 常年闲置在个位数,用电、占机位、占人工,利用率低得令人心疼。这就像买了个四室两厅的大宅子,却只住一个人,客厅、卧室、厨房全空着。

虚拟化的想法很简单:把一台物理机的算力"切"成很多份,每份都像一台独立的电脑,各自装系统、跑业务、互不干扰。这样一来,一台机器能同时干十台机器的活,省电、省钱、省机位。这个思路最早是 IBM 在大型机时代就玩过的,但真正把它带到普通人面前,是 1999 年 VMware 发布的 Workstation——在 x86 电脑上跑多个系统,虚拟化从此走下神坛,也成了后来所有云计算的基石。

Xen 时代:改内核的"半虚拟化"和云计算的起点

VMware 之后,2003 年英国剑桥大学的团队开源了 Xen,走了一条不一样的路:半虚拟化。虚拟机里的系统不再是"假装自己是整台电脑",而是主动配合管理程序,改一改内核,用更高效的方式协作,性能损耗更小。2006 年亚马逊推出 EC2 云服务器,底层用的就是 Xen——云计算的大幕就是从这里拉开的。

不过 Xen 也有麻烦:半虚拟化要求系统内核做修改,Windows 这种闭源系统根本不愿意配合。好在 2005 到 2006 年,Intel 和 AMD 在 CPU 里直接加入了虚拟化指令(VT-x 和 AMD-V),硬件自己会"分身"了,半虚拟化的尴尬才慢慢被化解。

OpenVZ:便宜背后的"大锅饭"

2005 年前后,另一条路线崛起:操作系统级虚拟化,代表就是 OpenVZ。它不造"整台电脑",而是把一个 Linux 系统像切蛋糕一样切成很多份容器,大家共享同一个内核、同一套底层。

打个比方:KVM 是在大楼里砌实网络封锁,每户独立成家;OpenVZ 则是大通铺里拉个帘子,厕所、厨房、天花板都是共用的。

这种模式的好处是轻、快、密度极高——一台物理机上能开出几百个"VPS",所以商家特别爱用,卖得也特别便宜。坏处也很明显:

  • 只能跑 Linux:共用内核,Windows 什么的想都别想,连换系统版本都受宿主限制。
  • 不能换内核、不能装内核模块:老想折腾新特性?没门。
  • 不能跑 Docker:容器里再套容器,权限和命名空间根本捋不清,这也是很多人装 Docker 报错的原因。
  • 天生适合超卖:内存是个共享大池子,商家敢把 1 台物理机卖出 200% 的容量,赌你不会同时吃满——赌输了就叫"邻居效应",全宿主机一起卡。

超卖这个词,中文互联网上有个更损的叫法:"仇人机"。一台机器塞太多人,谁都别想好过。

老玩家还知道 OpenVZ 的另一个坑:它连 swap 都不好使。内存不够时没法正常用磁盘顶替,一紧张就触发 OOM,进程直接被内核杀掉,网站说没就没;而 KVM 的虚拟机有自己的虚拟内存机制,内存告急还能靠 swap 苟一苟。再比如 OpenVZ 的"重启"根本不是真正重启,只是把进程杀了重跑一遍,内核还是那个内核——需要重新初始化硬件的软件,在它上面永远跑不对。这些细节,只有被坑过的人才懂有多痛。

KVM:2007 年进入内核,成了今天的"正规军"

2007 年 2 月,一个叫 KVM(Kernel-based Virtual Machine)的项目被并入 Linux 内核(2.6.20 版本)。它的思路天才得近乎偷懒:既然 Linux 内核这么能干,干脆让它自己兼任虚拟化管理器。KVM 最初由以色列公司 Qumranet 开发,2008 年被红帽以约 1.07 亿美元收购,从此背靠大树好乘凉。

KVM 是真正的"实网络封锁隔离":每台虚拟机都有自己的独立内核,内存说 1G 就是 1G,别人抢不走;可以自由装 Windows、Linux、BSD 各种系统;能跑 Docker、能改内核、能随便折腾。唯一的代价是有一点点性能开销,但对现代服务器来说几乎可以忽略。

KVM 的胜利有多彻底?2017 年 11 月,亚马逊宣布新一代 C5 实例转向 KVM,告别用了 11 年的 Xen。到今天,AWS、谷歌云、Oracle 云这些大厂的底层,本质都是 KVM 那一脉。说 KVM 是当今虚拟化的"普通话",一点不夸张。

Docker:虚拟化之后的"集装箱革命"

虚拟化解决了"一台机器分给很多人"的问题,但开发者的烦恼还在:代码在自己电脑上跑得好好的,一到服务器就各种"水土不服"。2013 年 3 月,Docker 开源,引爆了一场"集装箱革命"。

打个比方:以前部署应用,等于把整个家连人带家具搬过去,繁琐又容易散架。Docker 则把应用连同它需要的所有依赖,打包进一个标准"集装箱"(镜像)里,想在哪跑在哪跑,秒级启动,还方便回滚。做开发的人再也不用喊"在我电脑上明明能跑"了。

注意层级关系:KVM 是给不同用户之间砌的实网络封锁,Docker 是网络封锁里自己房间中的收纳箱。两者根本不冲突,甚至是最佳搭档——一台 KVM 的 VPS 里跑一堆 Docker 容器,是今天最主流的玩法。这也是为什么老手选 VPS 必选 KVM:因为只有 KVM 才玩得转 Docker。

Docker 还顺手改变了一个行业:DevOps。以前"开发"和"运维"是两个部门,代码从开发手里交到运维手里,中间得经历一堆环境配置的扯皮;Docker 把环境固化进镜像之后,开发交付的是一模一样的集装箱,运维只管搬箱子上船,扯皮成本大降。可以说 Docker 让"写代码的人自己就能把服务跑起来"成为可能,也为后来 Kubernetes 调度海量容器的时代铺好了路。

同样是 1核1G,为什么体验天差地别?

现在可以回答开头的问题了:

  • 超卖程度:标着 1核1G,宿主机上可能挤了几十号人。运气好大家都安静,运气差邻居在挖矿、跑爬虫,你的 CPU 就只剩残渣。OpenVZ/LXC 这类共享内核的容器技术,内存还是共享池,商家超卖空间极大;KVM 内存独享,超卖要收敛得多。
  • 邻居效应(noisy neighbor):这是"同价不同命"的最大来源。同一台物理机上,资源是零和的,别人多吃一口,你就少吃一口。
  • CPU 是否独享:有些 KVM 商家甚至支持 CPU 核数独享(dedicated CPU),开出来 CPU 主频稳定;便宜的则按份额分时,忙时被抢。
  • 宿主机硬件与存储:同样 1 核 1G,NVMe 固态和机械硬盘的差距,体感比虚拟化架构还大,这点别忽略。

一句话:配置单只写了"多高的天花板",商家良心和虚拟化架构,决定你实际能摸到多高。

还有个冷知识:OpenVZ 的老套路是给你标"内存 1G,突发 2G"。突发(burst)的意思是,平时你只有 1G 配额,宿主机闲着的时候让你临时多用点。听着很爽?反过来,宿主机一忙,你连标称的 1G 都可能拿不满——因为那是共享池。而 KVM 标注的内存是硬隔离,说 1G 就是 1G,谁也抢不走。这就是为什么同样 1 核 1G,KVM 贵一点,老手也愿意多掏那几块钱。

买 VPS 时怎么看?给普通用户的实用建议

下次看商家页面,先找这一行小字:虚拟化技术(Virtualization / Hypervisor)。

  • 写着 KVM:正规军,隔离好、内存独享、能跑 Docker,放心买,这是当前主流。
  • 写着 Xen:老牌选手,隔离性也靠谱,AWS 当年靠它起家,可以接受。
  • 写着 OpenVZ / LXC / 容器:便宜但共享内核,只能跑 Linux,跑不了 Docker,超卖风险大,新手和认真用的人请绕道。
  • 什么都 没写:默认按"可能有猫腻"处理,问客服或去论坛打听。

已经买了也没关系,SSH 进服务器敲一句 systemd-detect-virt,它会直接告诉你这台机器是 KVM、OpenVZ 还是别的。RackNerdCloudConeBuyVM 这类性价比商家,页面都会清清楚楚标着 KVM,这也是老玩家敢闭眼买的底气。记住这句口诀:便宜可以,但虚拟化必须 KVM——除非你只想挂个纯静态页面,那容器级的便宜货也不是不能碰。搞懂了这一层,你就再也不会被"同样配置"的价格差迷惑了。