Я привык работать с тюрьмами FreeBSD, но я хотел попробовать XenServer 5.5 / Vmware ESXI 5, надеясь, что он действительно может ограничить ресурсы для каждой виртуальной машины, после установки пары виртуальных машин я попытался выполнить на одной небольшой виртуальной машине (512RAM , 1 VCPU), (сервер имеет 8 ГБ оперативной памяти 2 процессора) следующий код:
$ cat > fork.c
#include <stdio.h>
int main() { while(1) fork(); }
$ gcc fork.c -o bomb
$ ./bomb
На сервере FreeBSD без виртуализации (без Xenserver / Vmware) этот код убьет машину, и потребуется выполнить полную перезагрузку, но я был удивлен, что на XenServer поведение «почти» похоже, вызывая некоторый ущерб.
XenServer начал использовать весь доступный процессор, а другая виртуальная машина FreeBSD стала иметь низкую производительность.
С другой стороны, при использовании последней версии Vmware Exi бомба затронула только виртуальную машину, которая запустила вилочную бомбу, ЦП для всего сервера не начал потреблять все ресурсы, а только примерно 40% их в определенный момент. что это позволяет мне создать вторую виртуальную машину и запустить на ней вторую бомбу, не замечая производительности на остальной части виртуальной машины. При одновременной работе двух бомб общее использование ЦП составляло 90%.
В моем случае я просто использую FreeBSD, но до сих пор не нашел, как предотвратить бомбу вилки, которая может убить хост-сервер, использование XenServer не сильно помогло. Vmware выглядит многообещающе, но не может быть и речи из-за стоимости.
Итак, есть идеи, как настроить Xenserver или Freebsd для работы со стрелами вилки?
Вы можете эффективно предотвратить взрывы вилки даже на физической машине с ограничениями пользователя. В FreeBSD это можно настроить одним из способов. /etc/login.conf
, с maxproc
параметр.
Для получения дополнительной информации обратитесь к документации. Вот.
Изменить: если этого недостаточно, вы должны иметь возможность поддерживать хотя бы работу XenServer с ограничением времени процессора, которое может получить любая виртуальная машина. См. Разделы о параметрах VCPU в документации Xen CLI. Вот.
Ограничение VCPU помогло, но теперь я столкнулся с другой проблемой:
как принудительно остановить / удалить VirtualMachine под XenServer (возможная ошибка)
Я не могу удалить / остановить / перезапустить экземпляры, которые содержат настроенное ядро FreeBSD (параметры xen), так как XenServer при загрузке этого ядра теряет контроль над экземпляром.
Обновить
Это устранило проблему: rctl - отображение и обновление базы данных ограничений ресурсов