В Linux ulimit – это встроенный инструмент для управления распределением ресурсов на глобальном, групповом и пользовательском уровнях. Для многопользовательской системы, такой как Linux, такая возможность имеет почти первостепенное значение. Это может предотвратить потребление нежелательных системных ресурсов, таких как ОЗУ и мощность процессора.
Узнайте, как установить постоянное значение ulimit в Linux.
Предельное значение
Ulimit устанавливает предопределенный предел количества ресурсов, которые может использовать пользователь. Инструмент использует определенный файл конфигурации в качестве ядра для назначения значений ulimit. Для более точной настройки лучше отредактировать файл.
$ cat /etc/security/limits.conf
Есть два типа ограничений, которые могут быть наложены: мягкие и жесткие. Эти типы лучше объяснить на простом примере.
Допустим, системный администратор хочет, чтобы определенный пользователь установил курсор на определенное значение. Здесь пользователь может при необходимости превысить значение, но не ограничен им. В этом случае это будет мягкий лимит. С другой стороны, если администратор хочет строго установить ограничение, то это будет жесткое ограничение.
Использование ulimit
Ulimit – это инструмент командной строки. Вот основная структура команды ulimit.
$ ulimit <options>
Показать все ограничения
Флаг «-a» перечислит все параметры и конфигурации для конкретного пользователя. Если пользователь не определен, вместо этого он напечатает ограничения для текущего пользователя.
$ ulimit -a <username>
Чтобы отобразить мягкие ограничения пользователя, используйте флаг «-S».
Чтобы отобразить жесткие ограничения пользователя, используйте флаг «-H».
$ ulimit -Ha <username>
Можно увидеть пределы определенного процесса. Подробности находятся в следующем файле. Обратите внимание, что это уникальный файл для каждого из запущенных в данный момент процессов. Поменяйте местами поле PID с PID целевого процесса.
$ cat /proc/<PID>/limits
Предельные параметры
Чтобы изменить ulimit, вы должны объявить, какой тип ограничения вы хотите определить. Вот список всех доступных параметров, которые вы можете изменить. Практически все они определяют максимальное значение каждого из параметров.
- b: размер буфера сокета
- c: размер созданных файлов ядра
- d: размер сегмента данных процесса
- e: приоритет планирования («хорошее» значение)
- f: количество файлов, созданных оболочкой
- i: количество ожидающих сигналов
- l: размер для фиксации в памяти
- м: размер резиденции
- n: количество открытых файловых дескрипторов
- p: размер буфера трубы
- q: количество байтов в очередях сообщений POSIX
- r: приоритет планирования в реальном времени
- s: размер стопки
- t: время процессора (в секундах)
- T: количество потоков
- u: количество процессов, доступных пользователю
- v: Объем виртуальной памяти, доступной для обработки
- x: количество файловых блокировок
Временное изменение значения ulimit
Можно временно изменить значение ulimit для конкретного пользователя. Изменение будет действовать до тех пор, пока пользователь не выйдет из системы, не истечет срок сеанса или пока система не перезагрузится. Здесь мы покажем пример того, как установить максимальное количество процессов для пользователя.
Чтобы изменить количество доступных процессов на 12345, выполните следующую команду. Это наложит временное жесткое ограничение на пользователя.
$ ulimit -u
$ ulimit -u 12345
Проверьте жесткий лимит, чтобы проверить.
Изменить значение ulimit навсегда
Как упоминалось ранее, ulimit использует файл конфигурации системы, который определяет значение ulimit по умолчанию. Внося изменения в этот файл, вы можете навсегда изменить значение ulimit для любого пользователя.
Откройте файл в вашем любимом текстовом редакторе. Обратите внимание, что файл должен быть открыт с правами root для сохранения изменений.
$ sudo vim /etc/security/limits.conf
Здесь записи файла имеют следующую структуру.
$ <domain> <type> <item> <value>
Давайте вкратце разберем каждое из полей.
- domain: имена пользователей, группы, диапазоны GUID и т. д.
- type: Тип лимита (мягкий/жесткий)
- item: ресурс, который будет ограничен, например, размер ядра, nproc, размер файла и т. д.
- value: предельное значение
Вот краткий список всех доступных предметов.
- core: ограничивает размер основного файла (в КБ)
- cpu: время процессора (в мин.)
- data: размер данных (в КБ)
- fsize: Размер файла (в КБ)
- locks: блокировка файлов, которую пользователь может удерживать
- memlock: заблокированное адресное пространство в памяти (в КБ)
- nproc: количество процессоров
- rtpio: приоритет в реальном времени
- sigpending: Количество ожидающих сигналов
Полный список доступных элементов можно найти на странице руководства limits.conf.
$ man limits.conf
Например, следующая запись ограничит количество ядер ЦП, которые может использовать пользователь «andrey», до 2.
$ andrey hard nproc 2
После редактирования сохраните файл. Чтобы изменения вступили в силу, затронутые пользователи должны выйти из системы и повторно войти в систему. В зависимости от того, как это реализовано, может также потребоваться перезагрузка системы.
Последние мысли
Инструмент ulimit предлагает мощный способ управления ресурсами. Это просто, но эффективно в том, что делает. Что бы вы ни делали, убедитесь, что лимит, который вы собираетесь реализовать, введен правильно. Если вы пробуете эти вещи впервые, попробуйте сначала протестировать их на виртуальной машине.
Команда ulimit – это нечто большее, чем мы обсудили здесь.
Удачных вычислений!