Ответ
ulimit — это встроенная команда оболочки (shell) для управления лимитами ресурсов для процессов, запущенных из текущей сессии. В DevOps это критически важный инструмент для предотвращения сбоев приложений из-за исчерпания ресурсов.
Типичные сценарии использования:
- Предотвращение истощения файловых дескрипторов: Веб-сервер (например, Nginx) или база данных могут "упасть", если исчерпают лимит на открытые файлы.
- Ограничение потребления памяти: Защита системы от "съедания" всей памяти одним процессом.
- Ограничение числа процессов (fork bombs): Защита от случайного или злонамеренного создания бесконечного числа процессов.
Основные параметры:
-n– максимальное число открытых файловых дескрипторов (самый частый лимит).-u– максимальное число процессов для пользователя.-v– максимальный объем виртуальной памяти (KB).-c– максимальный размер core-файлов.
Примеры команд:
# Показать все текущие лимиты для сессии
ulimit -a
# Установить лимит открытых файлов на 65535 для текущей shell-сессии
ulimit -n 65535
# Проверить лимит для конкретного запущенного процесса (например, Nginx с PID 1234)
cat /proc/1234/limits
Важные нюансы для production:
- Изменения через
ulimitв командной строке временны и действуют только на процессы, запущенные из этой сессии. - Для постоянной настройки лимитов системных служб (systemd) нужно править
LimitNOFILE,LimitNPROCв юнит-файле службы (/etc/systemd/system/service.service). - Для глобальных лимитов пользователей редактируется файл
/etc/security/limits.conf(формат:<domain> <type> <item> <value>). - Лимиты, установленные для пользователя, наследуются всеми его процессами.