Что вы знаете о ulimits и как их использовать в системах на Linux?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Ulimits (user limits) — это ограничения на потребление ресурсов процессами операционной системой Linux. Они помогают предотвратить исчерпание системных ресурсов одним процессом и обеспечить стабильность.
Основные ресурсы, которые можно ограничить с помощью ulimits:
- CPU time (seconds): Максимальное время работы CPU для процесса.
- File size (blocks): Максимальный размер файла, который может создать пользователь.
- Data segment size (kbytes): Максимальный размер сегмента данных процесса.
- Stack size (kbytes): Максимальный размер стека процесса.
- Core file size (blocks): Максимальный размер core-дампа.
- Resident set size (kbytes): Максимальный размер резидентной памяти процесса (часто не поддерживается или имеет только "soft" ограничение).
- Number of processes: Максимальное количество процессов, которое может создать пользователь.
- Open files: Максимальное количество файлов, которое может открыть процесс.
- Locked memory ([kbytes]): Максимальный объем памяти, который может быть заблокирован в ОЗУ.
- Max user processes: Максимальное количество процессов, доступных конкретному пользователю (игнорирует ID другого пользователя при подсчете).
- Pending signals: Максимальное количество сигналов, которые могут ожидать в очереди для конкретного процесса.
- Msgqueue size (bytes): Максимальный размер очереди сообщений POSIX.
- Real-time priority: Максимальный приоритет реального времени, который может быть установлен.
- Nice priority: Максимальное "мягкое" значение приоритета.
- Real-time locked memory (kbytes): Максимальный размер памяти, заблокированной для задач реального времени.
Ulimits бывают двух типов:
- Soft limit: Текущее, активно применяемое ограничение. Пользователь или процесс может увеличить Soft limit, но не выше Hard limit.
- Hard limit: Максимальное возможное ограничение, установленное администратором. Только суперпользователь (root) может увеличить Hard limit.
Просмотр текущих ulimits:
Используйте команду ulimit в командной оболочке (например, bash).
# Показать все soft limits
ulimit -a
# Показать hard limit для открытых файлов
ulimit -Hn
Установка ulimits:
Ulimits можно устанавливать временно для текущей сессии или процесса, либо постоянно.
Временная установка:
Используйте команду ulimit в командной оболочке. Это действует только для текущей оболочки и дочерних процессов, запущенных из нее.
# Установить soft limit для открытых файлов на 4096
ulimit -Sn 4096
# Установить hard limit для числа процессов на 100
ulimit -Hu 100
Постоянная установка:
Редактирование файла /etc/security/limits.conf или файлов в каталоге /etc/security/limits.d/. Этот метод требует прав суперпользователя и применяется при входе пользователя в систему (через PAM).
Формат файла /etc/security/limits.conf:
# <domain> <type> <item> <value>
# Domain может быть: user (@group), group (@group), wildcard (*)
# Type может быть: soft, hard, - (оба)
# Item - тип ресурса (nofile, nproc и т.д.)
# Value - значение ограничения
* soft nofile 4096 # Все пользователи, soft limit на открытые файлы 4096
@mygroup hard nproc 256 # Группа mygroup, hard limit на процессы 256
myuser - stack 8192 # Пользователь myuser, оба limit на стек 8192 kB
После изменения /etc/security/limits.conf требуется перелогиниться, чтобы изменения вступили в силу.
Ulimits часто используются для:
- Предотвращения "fork bombs" (процессов, создающих множество дочерних процессов).
- Ограничения памяти, потребляемой процессами, для предотвращения "out of memory" ситуаций.
- Ограничения количества открытых файлов, что важно для сетевых приложений и баз данных.
- Контроля над потреблением CPU ресурсоемкими приложениями.
Использование ulimits является важной частью hardening'а системы и обеспечения стабильности и предсказуемости работы приложений в производственной среде.