09-11-2023, 06:26 PM
OpenVZ VPS通常在内存、磁盘空间或带宽(或所有这些)方面都超卖。超卖内存和磁盘空间很容易。你只是vzctl create一个新的虚拟环境,不管是否有足够的内存或磁盘空间,小菜一碟。但是如果做得过火,肯定会激怒您的客户。
这也是反对 OpenVZ 的众多论据之一,尤其是与 Xen 相比时。“OpenVZ 获得了超卖的资源。Xen VPS 有专门的内存,等等等等。” 好吧。不完全正确。
2 周前,我从北卡罗来纳州阿什维尔的一家供应商那里得到了一个便宜的 VPS。可能应该在这里保持匿名的人
这是一个运行 Ubuntu 10.04 和 64 位 Linux 2.6.32 内核的Xen VPS 。512MB 内存、25GB 磁盘空间和比我需要的更多带宽。价格也很不错。所以我登录并检查它有多少内存......
我的 Xen VPS 上面有 330MB 内存。让我们看看正在运行哪些进程。
VPS 上没有运行任何内存密集型的东西。SSH 服务器、syslogd、cron 等等。那么我的 330MB 已用内存消失在哪里了?
在进一步挖掘之前,这是事实。绝对可以在 Xen VPS 上超卖内存。多年来众所周知的东西,尽管 Xen 供应商不想谈论它。它使用一种称为 ballooning 的技术。
基本上,您的系统上安装了一个特殊的 Linux 内核驱动程序——“balloon driver”。当 dom0(Xen 服务器/管理程序)需要更多内存,并希望从客户 VPS (domU) 中申请一些内存时,它会要求客户 VPS 的气球驱动程序膨胀本身——通过向其 Linux 内核请求一些内存。内核内存分配将从该 VPS 的可用内存中请求,并且无法调出以进行交换。一旦气球驱动程序消耗了内存,它就会传递给 dom0/hypervisor 以在其他地方使用(例如,创建一个新的 VPS)。因此,您的 VPS 的“总内存”量将保持不变,但“已用内存”会大幅增加,因为内核内部的气球驱动程序现在已经使用了一大块,并且现在可能是其中的一部分另一个VPS。用户级守护程序“xenballoond”(实际上是一个 bash 脚本)也可用于允许动态气球,尽管我在我的 VPS 中没有看到它。
我想这可以解释为什么我使用了 330MB 的内存,而我只有很少的进程在运行。
我在 procfs 中发现这个文件很有趣:
我似乎无法找到足够的文件来解释这些值的含义。看起来我的 VPS 已请求 512MB 内存(请求目标),并且当前已分配(当前分配)。但是同时它也有“最小目标”——为这个 VPS 保留的最小内存量,以防止它在气球请求过多时被 FUBAR——设置为 169MB。这是否意味着我的 VPS 真正保证了多少内存?
这当然是我不熟悉的东西,也许一些供应商可以启发我们。不过结论还是一样的。Xen 的超卖当然是可能的。
这也是反对 OpenVZ 的众多论据之一,尤其是与 Xen 相比时。“OpenVZ 获得了超卖的资源。Xen VPS 有专门的内存,等等等等。” 好吧。不完全正确。
2 周前,我从北卡罗来纳州阿什维尔的一家供应商那里得到了一个便宜的 VPS。可能应该在这里保持匿名的人

代码:
# free
total used free shared buffers cached
Mem: 543776 535360 8416 0 66516 130504
-/+ buffers/cache: 338340 205436
Swap: 1048568 136 1048432
代码:
# ps aux
...
root 204 0.0 0.1 17028 780 ? S Oct27 0:00 upstart-udev-bridge --daemon
102 356 0.0 0.1 23548 1080 ? Ss Oct27 0:00 dbus-daemon --system --fork
root 431 0.0 0.1 21068 788 ? Ss Oct27 0:00 cron
root 3110 0.0 0.5 253832 2992 ? Sl Oct28 0:00 /usr/sbin/console-kit-daemon --no-daemon
root 11037 0.0 0.1 49256 1012 ? Ss Oct28 0:00 /usr/sbin/sshd
root 15427 0.0 0.1 12520 772 ? S Oct28 0:00 /usr/sbin/syslogd --no-forward
root 31231 0.0 0.0 16748 436 ? S<s Nov12 0:00 udevd --daemon
root 5716 0.0 0.6 79100 3772 ? Ss 01:02 0:00 sshd: root@pts/0
root 5731 0.0 0.3 19400 2148 pts/0 Ss 01:02 0:00 -bash
root 5782 0.0 0.1 6072 724 ? Ss 01:08 0:00 /sbin/getty -8 38400 hvc0
root 5783 0.0 0.2 15248 1172 pts/0 R+ 01:08 0:00 ps --sort=start_time uax
在进一步挖掘之前,这是事实。绝对可以在 Xen VPS 上超卖内存。多年来众所周知的东西,尽管 Xen 供应商不想谈论它。它使用一种称为 ballooning 的技术。
基本上,您的系统上安装了一个特殊的 Linux 内核驱动程序——“balloon driver”。当 dom0(Xen 服务器/管理程序)需要更多内存,并希望从客户 VPS (domU) 中申请一些内存时,它会要求客户 VPS 的气球驱动程序膨胀本身——通过向其 Linux 内核请求一些内存。内核内存分配将从该 VPS 的可用内存中请求,并且无法调出以进行交换。一旦气球驱动程序消耗了内存,它就会传递给 dom0/hypervisor 以在其他地方使用(例如,创建一个新的 VPS)。因此,您的 VPS 的“总内存”量将保持不变,但“已用内存”会大幅增加,因为内核内部的气球驱动程序现在已经使用了一大块,并且现在可能是其中的一部分另一个VPS。用户级守护程序“xenballoond”(实际上是一个 bash 脚本)也可用于允许动态气球,尽管我在我的 VPS 中没有看到它。
我想这可以解释为什么我使用了 330MB 的内存,而我只有很少的进程在运行。
我在 procfs 中发现这个文件很有趣:
代码:
# cat /proc/xen/balloon
Current allocation: 524288 kB
Requested target: 524288 kB
Minimum target: 173056 kB
Maximum target: 532480 kB
Low-mem balloon: 8192 kB
High-mem balloon: 0 kB
Driver pages: 224 kB
这当然是我不熟悉的东西,也许一些供应商可以启发我们。不过结论还是一样的。Xen 的超卖当然是可能的。