Vmware-Esxi

在虛擬化環境 XenServer / ‘FreeBSD jails’ 上處理 fork 炸彈

  • April 19, 2016

我習慣使用 FreeBSD 監獄,但我想嘗試 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,但仍然沒有找到防止可以殺死主機伺服器的分叉炸彈,使用 XenServer 並沒有多大幫助。Vmware 看起來很有希望,但由於成本原因,這是不可能的。

那麼,關於如何微調 Xenserver 或 Freebsd 以處理分叉繁榮的任何想法?

限制 VCPU 有所幫助,但現在我面臨另一個問題:

如何在 XenServer 下強制停止/刪除 VirtualMachine(可能的錯誤)

我無法刪除/停止/重新啟動包含自定義 FreeBSD 核心(xen 選項)的實例,一些 XenServer 在啟動此核心時會失去對實例的控制。

更新

這解決了問題:rctl – 顯示和更新資源限制數據庫

即使在有使用者限制的物理機上,您也可以有效地防止分叉炸彈。在 FreeBSD 上,一種配置方法是在/etc/login.conf, 中使用maxproc參數。

有關更多資訊,請參閱此處的文件。

編輯:如果這還不夠,您至少應該能夠保持 XenServer 執行,同時限制任何 VM 可以獲得的 CPU 時間。請參閱此處的 Xen CLI 文件中有關 VCPU 參數的部分。

引用自:https://serverfault.com/questions/312017