Что такое ulimit в Linux и для чего он используется?

«Что такое ulimit в Linux и для чего он используется?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ulimit — это встроенная команда оболочки (shell) для управления лимитами ресурсов для процессов, запущенных из текущей сессии. В DevOps это критически важный инструмент для предотвращения сбоев приложений из-за исчерпания ресурсов.

Типичные сценарии использования:

  1. Предотвращение истощения файловых дескрипторов: Веб-сервер (например, Nginx) или база данных могут "упасть", если исчерпают лимит на открытые файлы.
  2. Ограничение потребления памяти: Защита системы от "съедания" всей памяти одним процессом.
  3. Ограничение числа процессов (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>).
  • Лимиты, установленные для пользователя, наследуются всеми его процессами.