web-dev-qa-db-ja.com

仮想化環境でフォーク爆弾を処理するXenServer /「FreeBSDjails」

私はFreeBSDjailでの作業に慣れていますが、XenServer 5.5/Vmware ESXI 5を試してみたかったのですが、VMごとのリソースを実際に制限できることを期待して、いくつかの仮想マシンをインストールした後、1つの小さなVM(512RAM、1 VCPU)、(サーバーには8GB ram 2プロセッサがあります)次のコード:

$ cat > fork.c    
#include <stdio.h> 
int main() { while(1) fork(); }
$ gcc fork.c -o bomb
$ ./bomb

仮想化のないFreeBSDサーバー(Xenserver/Vmwareなし)では、そのコードはマシンを強制終了し、ハードリセットを実行する必要がありますが、XenServerでの動作が「ほぼ」類似しており、何らかの損傷を引き起こしていることに驚きました。

XenServerは利用可能なすべてのCPUを消費し始め、他のFreeBSD VMはパフォーマンスが低下し始めました。

一方、最新バージョンのVmware Exiを使用すると、爆弾はフォーク爆弾を発射した仮想マシンにのみ影響し、サーバー全体のCPUは、ある時点ですべてのリソース(約40%)を消費し始めませんでした。これにより、VMの残りの部分のパフォーマンスに気付かずに、2番目のVMを作成して2番目の爆弾を実行できます。 2つの爆弾を同時に実行すると、CPUの合計使用率は90%でした。

私の場合、FreeBSDを使用しているだけですが、ホストサーバーを殺す可能性のあるフォーク爆弾を防ぐ方法がまだ見つかりません。XenServerを使用してもあまり役に立ちませんでした。 Vmwareは有望に見えますが、コストがかかるため問題ありません。

それで、フォークブームを処理するためにXenserverまたはFreebsdを微調整する方法のアイデアはありますか?

2
nbari

VCPUを制限することは役に立ちましたが、今私は別の問題に直面しています:

XenServerでVirtualMachineを強制的に停止/削除する方法(バグの可能性あり)

カスタマイズされたFreeBSDカーネル(xenオプション)を含むインスタンスを削除/停止/再起動できません。このカーネルを起動するときにXenServerがインスタンスの制御を失う方法があります。

更新

これにより、問題が修正されました。 rctl -リソース制限データベースの表示と更新

0
nbari

ユーザー制限のある物理マシンでも、フォーク爆弾を効果的に防ぐことができます。 FreeBSDでは、これを設定する1つの方法は/etc/login.confmaxprocパラメーターを使用。

詳細については、ドキュメント ここ を参照してください。

編集:これが十分でない場合は、少なくともXenServerを実行し続け、任意のVMが取得できるCPU時間を制限する必要があります。XenCLIドキュメントのVCPUパラメーターに関するセクションを参照してください。 ここ

3
Sven