Вопрос или проблема
Мы — несколько человек, работающих на одной учетной записи пользователя.
Я хочу ограничить свои действия, чтобы не зависать компьютеру и не беспокоить других людей. Я хочу ограничить использование своих ресурсов, чтобы не использовать их все (потому что если процесс может, он использует все).
Существует два подхода: приоритетный и строгий лимит. Проблема в том, что 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 и настроить её для вашей оболочки. Примерный порядок действий:
-
Создайте cgroup:
sudo cgcreate -g cpu,memory:/mygroup
-
Установите ограничения:
echo 1024M | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes echo 500 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.shares
-
Запустите вашу оболочку внутри cgroup:
sudo cgexec -g cpu,memory:mygroup /bin/bash
В результате все процессы, запущенные в этой оболочке через cgexec
, будут под строгим контролем ресурсов.
Заключение
Используя ulimit
, вы можете эффективно ограничивать использование ресурсов в своей конкретной оболочке, что является идеальным решением для ситуаций, когда несколько пользователей работают под одной учетной записью. Если же у вас есть возможность работать с cgroups, это даст вам еще больше возможностей для управления ресурсами и предотвратит негативное воздействие на производительность системы и других пользователей. Таким образом, выбирая правильный инструмент, вы сможете оптимизировать ваше взаимодействие с общей системой и избежать конфликтов за ресурсы, что особенно важно в многопользовательских средах.