我习惯使用 FreeBSD jails,但我想尝试一下 XenServer 5.5 / Vmware ESXI 5,希望它真的可以限制每个 VM 的资源,在安装了几个虚拟机后,我尝试在一台小型 VM(512RAM,1 VCPU)上执行以下代码(服务器有 8GB RAM 2 个处理器):
$ cat > fork.c
#include <stdio.h>
int main() { while(1) fork(); }
$ gcc fork.c -o bomb
$ ./bomb
在没有虚拟化(没有 Xenserver/Vmware)的 FreeBSD 服务器上,该代码将杀死机器并需要进行硬重置,但令我惊讶的是,在 XenServer 上,行为“几乎”类似,并造成一些损害。
XenServer 开始消耗所有可用的 CPU,而其他 FreeBSD VM 开始性能不佳。
另一方面,使用最新版本的 Vmware Exi,炸弹仅影响触发 fork 炸弹的虚拟机,整个服务器的 CPU 并未开始消耗所有资源,仅消耗了大约 40%,此时我允许创建第二个 VM 并在其上运行第二个炸弹,而不会注意到 VM 其余部分的性能。同时运行 2 个炸弹时,CPU 的总使用率为 90%。
就我而言,我只使用 FreeBSD,但仍然没有找到防止可能杀死主机服务器的 fork 炸弹的方法,使用 XenServer 也没有多大帮助。Vmware 看起来很有前途,但由于成本原因,无法考虑。
那么,您知道如何微调 Xenserver 或 Freebsd 来处理 fork boom 吗?
答案1
答案2
限制 VCPU 有所帮助,但现在我面临另一个问题:
如何强制停止/删除 XenServer 下的虚拟机(可能有错误)
我无法删除/停止/重新启动包含自定义 FreeBSD 内核(xen 选项)的实例,因为 XenServer 在启动此内核时会失去对该实例的控制。
更新
这解决了问题:rctl-- 显示和更新资源限制数据库