在虚拟化环境中处理fork炸弹XenServer /“FreeBSD jails”

我习惯于使用FreeBSD jails,但是我想尝试一下XenServer 5.5 / Vmware ESXI 5,希望能够真正限制每个虚拟机的资源,安装好几台虚拟机之后,我试图在一个小型的虚拟机(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开始performance不佳。

另一方面,使用最新版本的Vmware Exi,炸弹只影响了发射叉炸弹的虚拟机,整个服务器的CPU并没有开始占用大约40%的资源它允许我创build第二个虚拟机,然后运行第二个虚拟机,而没有注意到其他虚拟机的性能。 有2枚炸弹在同一时间运行的总CPU使用率为90%。

在我的情况下,我只是使用FreeBSD,但仍然没有发现,以防止可以杀死主机服务器的叉炸弹,使用XenServer没有多大帮助。 Vmware看起来很有前景,但是由于成本问题,这是毫无疑问的。

那么,如何微调Xenserver或Freebsd来处理叉子繁荣的任何想法?

即使在具有用户限制的物理机器上,您也可以有效地防止叉炸弹。 在FreeBSD上,configuration这个的一个方法是使用maxproc参数在/etc/login.conf

有关更多信息,请参阅此处的文档。

编辑:如果这还不够,您应该至less可以保持XenServer的运行,限制任何虚拟机可以获得的CPU时间。 请参阅Xen CLI文档中有关VCPU参数的章节。

限制VCPU的帮助,但现在我面临着另一个问题:

如何强制停止/删除XenServer下的VirtualMachine(可能的错误)

我无法删除/停止/重新启动包含定制的FreeBSD内核(xen选项)的实例,有些XenServer在启动这个内核时如何失去对实例的控制。

更新

这解决了这个问题: rctl – 显示和更新资源限制数据库