ulimit оболочка, а не пользователь

Вопрос или проблема

Мы — несколько человек, работающих на одной учетной записи пользователя.

Я хочу ограничить свои действия, чтобы не зависать компьютеру и не беспокоить других людей. Я хочу ограничить использование своих ресурсов, чтобы не использовать их все (потому что если процесс может, он использует все).

Существует два подхода: приоритетный и строгий лимит. Проблема в том, что Linux не очень хорошо управляет приоритетами, что означает, что вы будете замедлять другие действия даже с худшим приоритетом. Поэтому остается строгий лимит.

Но я хочу ограничить только свой терминал, а не учетную запись, которую используют многие люди.

У вас есть предложения по поводу приоритетов или строгих лимитов?

ulimit может быть использован для этого: он устанавливает лимиты для текущего терминала, а не для пользователя глобально или для будущих терминалов; и эти лимиты унаследованы процессами, запущенными в этом терминале.

Чтобы убедиться в этом, откройте два терминала с одним и тем же пользователем в одной системе; проверьте лимиты (ulimit -a) в обоих, затем в одном из них установите лимиты с помощью ulimit, а затем снова выполните ulimit -a в другом терминале — лимиты, установленные в первом терминале, не повлияют на второй терминал.

Лимиты, установленные с помощью ulimit на Linux, описаны подробно в руководстве setrlimit. Они не очень полезны, если вы хотите «дружелюбно» относиться к рабочим нагрузкам других пользователей на общей системе; они предотвращают ненадежные процессы от CONTRIBUTING к исчерпанию ресурсов (например, можно предотвратить создание большими файлами процессами).

Вам может быть интересно посмотреть на cgroups, если они доступны в вашей системе и доступны вам как обычному пользователю. Они дают больше контроля над использованием памяти, ЦПУ и ввода-вывода, что обычно создает проблемы на многопользовательских системах.

Ответ или решение

Для управления ресурсами в среде Linux, когда несколько пользователей работают под одной учетной записью, необходимо обратить внимание на инструменты, которые позволяют установить ограничения для конкретного процесса или оболочки без влияния на других пользователей. В данном контексте команда ulimit предоставляет удобный способ ограничить ресурсы, используемые в вашей текущей оболочке, не затрагивая остальных. Давайте подробно рассмотрим, как это сделать.

Понимание ulimit

Команда ulimit устанавливает ограничения на ресурсы для текущей оболочки и всех дочерних процессов, запущенных из неё. Эти ограничения не влияют на другие оболочки и процессы. Чтобы проверить текущие лимиты, введите:

ulimit -a

Это вернёт полный список лимитов, таких как максимальный размер файла, максимальное количество открытых файлов и так далее. С помощью ulimit вы можете установить ограничения для следующих ресурсов:

  • Максимальный размер файла (-f)
  • Максимальное количество процессов (-u)
  • Максимальное использование памяти (-m)
  • Максимальное время процессора (-t)
  • Максимально допустимый размер стека (-s)

Чтобы установить, например, максимальный размер создаваемых файлов в 100 МБ, выполните:

ulimit -f 100000

После этого все файлы, создаваемые в этой оболочке, не смогут превышать указанный размер. Чтобы убедиться, что эти ограничения действуют только на вашу оболочку, откройте две разные оболочки и проверьте, что во второй оболочке ограничения не были изменены.

Альтернатива: контроль групп ресурсов (cgroups)

Хотя ulimit позволяет ограничивать ресурсы, в случае более строгого управления вы можете рассмотреть использование контрольных групп (cgroups). Cgroups предоставляют более детальный и мощный механизм для управления потреблением ресурсов, поскольку они могут контролировать использование CPU, памяти и ввода-вывода для группы процессов.

Чтобы использовать cgroups, вам может понадобиться привилегированная учетная запись или настройки системы, поддерживающие cgroups. Если у вас есть доступ, можно создать cgroup и настроить её для вашей оболочки. Примерный порядок действий:

  1. Создайте cgroup:

    sudo cgcreate -g cpu,memory:/mygroup
  2. Установите ограничения:

    echo 1024M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
    echo 500 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.shares
  3. Запустите вашу оболочку внутри cgroup:

    sudo cgexec -g cpu,memory:mygroup /bin/bash

В результате все процессы, запущенные в этой оболочке через cgexec, будут под строгим контролем ресурсов.

Заключение

Используя ulimit, вы можете эффективно ограничивать использование ресурсов в своей конкретной оболочке, что является идеальным решением для ситуаций, когда несколько пользователей работают под одной учетной записью. Если же у вас есть возможность работать с cgroups, это даст вам еще больше возможностей для управления ресурсами и предотвратит негативное воздействие на производительность системы и других пользователей. Таким образом, выбирая правильный инструмент, вы сможете оптимизировать ваше взаимодействие с общей системой и избежать конфликтов за ресурсы, что особенно важно в многопользовательских средах.

Оцените материал
Добавить комментарий

Капча загружается...