Ограничение процессов в Linux по ресурсам?

Мы решили запустить свой игровой хостинг и уже вплотную подобрались к планированию архитектуры. Некоторые вопросы самостоятельно решить не получается — взываем к хабраразуму.


Основной вопрос пока такой: есть физический сервер с debian на борту на нем нужно держать энное количество клиентских игровых серверов (один сервер — один процесс). И каким-то образом гибко ограничивать в ресурсах каждый процесс. Гугление вывело на утилиты nice и cpu_limit, но еще более углубленное гугление выдало многочисленные проблемы с этими утилитами, да и не совсем понятно, как ими управлять (допустим, есть 5 клиентов, значит на каждый клиент мы (грубо) отдаем 20% процессорного времени и 20% от оперативки. Добавляется еще один клиент и нужно как-то без перезапуска процессов изменить эти квоты).


Была мысль сделать свой суперлегковесный дистрибутив и сделать несколько виртуальных машин на базе qemu, но тогда не совсем понятно, каким образов управлять процессом игрового сервера внутри гостевой машины — перезапуск, например. Перезапускать полностью виртуальную машину тоже не очень хочется — будет система мониторинга серверов, которая пытается перезапустить упавшие инстансы. Можно было бы внести скрипт запуска игрового сервера в автозапуск, но не совсем понятно, что с ним делать, если он упадет и, допустим, прочесть логи из клиентской машины.


Словом, сказываются некие пробелы в администрировании unix-систем, которые самостоятельно не получается заполнить. Буду рад любым идеям и предположениям, спасибо!
  • Вопрос задан
  • 5360 просмотров
Пригласить эксперта
Ответы на вопрос 5
opium
@opium
Просто люблю качественно работать
Используйте виртуалки на базе xen или kvm
Ответ написан
Комментировать
WNeZRoS
@WNeZRoS
На виртуальных машинах кроме игрового сервера можно поставить свой, который будет следить и управлять игровым.
Ответ написан
Комментировать
librarian
@librarian
cgroups
Ответ написан
Комментировать
@Jazzist
Если характеристика потребления ресурсов изменяется условно «плавно», к примеру, вы можете гарантировать по условию, что частота экстремумов графика не будет превышать 1 герц — можно использовать AVG. Простой скрипт, на BASH или PERL, который будет ренайсить процессы в зависимости от потребления ресурсов.

Если возможно более резкое потребление ресурсов — эффективных решений нет. Виртуализация не поможет — повесить машину, на которой находится виртуалка, в целом ряде популярных случаев — не проблема. В качестве теста пробуйте, к примеру, масштабировать imagemagick convert много картинок по регулярке. Этим экспериментом как-то повесили известного хостинг-провайдера, даром что запускалось через виртуоззо.

Оффтоп. FreeBSD вообще не умеет управлять потреблением ресурсов в реальном времени, пройденный этап — даже не смотрите в ее сторону. С Debian и Ubuntu у меня и коллег это получалось.

Решение — пробуйте спрогнозировать нагрузку и спланировать ресурсы под вариант-максимум. Как показывает практика, это действительно эффективный подход. Если упираетесь в финансирование — пересматривайте бизнес-модель. У Google это, кстати, получилось…
Ответ написан
@whynot
Всем спасибо за ответы, к сожалению, адекватного нашим задачам, решения получить не удалось, поэтому будет не самый желательный вариант — оставим всё без ограничений (вероятность утечек памяти, например, минимальна по словам разработчиков серверных приложений). И просто будет активный мониторинг, который будет предупреждать админов о заканчивающихся ресурсах
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы