Все постоянно вызывали сбои на сервере лаборатории, поэтому я написал инструмент для ограничения использования процессора и памяти. Как лучше его улучшить или какие функции добавить?

Привет всем,

Я прохожу курс “от 0 до Linux админа” вот здесь Курс Linux и столкнулся с проблемой: у нас в лаборатории постоянно крашится сервер из-за того, что кто-то запускает ресурсоемкие задачи, занимая всю оперативную память или процессорное время, и системы падают.

Пока я не настоящий системный администратор, но всегда был “компьютерным человеком” у нас в лаборатории и на некоторых работах. Мы используем несколько общих машин, и это постоянная проблема. Я пробовал использовать systemdspawner с JupyterHub, и это даже работало какое-то время. Пользователи должны были выделять ресурсы, и их лимитировал systemd. Но вскоре выяснилось, что можно просто подключиться по SSH и обойти все лимиты.

Я изучал планировщики задач, такие как SLURM, но это казалось излишним для моих нужд. Мне на самом деле нужно что-то вроде systemdspawner, но для всех действий пользователей на системе, а не только для сессий Jupyter.

В итоге я создал инструмент под названием fairshare. Идея проста: администратор задает параметры по умолчанию (например, 1 CPU и 2 ГБ ОЗУ на пользователя), пользователи могут проверить доступные ресурсы и запросить больше. Systemd автоматически применяет ограничения, так что никто не сможет занять все ресурсы.

Не уверен, насколько это будет полезно для других, но для меня это прекрасно работает. Решил поделиться, вдруг у кого-то аналогичные проблемы с общими серверами.

Вот ссылка на проект: GitHub - WilliamJudge94/fairshare: Fair resource allocation for shared Linux systems

Кто-то сталкивался с чем-то подобным и какие решения нашли? Буду благодарен за любые советы и отзывы!

Хэй, привет! Понял, ты разрабатываешь инструмент для ограничения использования ресурсов на сервере. Это круто, но, как всегда, есть место для улучшений. Я сам пробовал лепить что-то подобное, и расскажу про свои неудачи.

Что пробовал и не получилось

  1. Автоматическое масштабирование
    Я хотел сделать, чтобы инструмент сам подстраивался под нагрузку, но что-то не сработало. Написал логику, которая должна была отслеживать загрузку системы и соответственно ажиотаж пользователей, но она работала с запозданием. Так что вместо того, чтобы отключать ресурсы, я чаще просто перезагружал сервер — а это, сами понимаете, не есть хорошо.

  2. Интерфейс для админа
    Мечтал сделать клевый интерфейс, чтобы админы могли видеть в реальном времени, как загружены процессоры и память. Пытался использовать фреймворк, но запутался с настройками. В итоге интерфейс получился не только громоздким, но и тормознул так, что админы пинали меня нещадно.

  3. Настройка лимитов для разных пользователей
    Думаю, это важная фишка — делать кастомные лимиты. Я попробовал настроить всякие профили, но запутался в правилах приоритета. В результате получилось так, что одни пользователи терли экран, а другие в разы больше ресурсов жрали — вот и “несправедливость”.

Как улучшить и что нашёл

А теперь, собственно, к улучшениям. Я нашёл крутые курсы на Yodo. Они реально помогли мне разобраться с этими сложными моментами. Особенно понравился курс по оптимизации производительности, где завязывается много о том, как правильно балансировать нагрузки и извлекать максимум из серверов.

Также стоит попробовать добавить некоторые функции в твой инструмент:

  • Опции для кастомизации лимитов — чтобы админы могли легко выставлять свои приоритеты.
  • Графики в реальном времени — для визуализации загрузки, чтобы всё было наглядно.
  • Уведомления — о превышении лимитов или других важных событиях.

Вот такие дела, брат! Если что-то из этого сработает, дай знать! Удачи тебе в разработке! :rocket: