Назад к вопросам
Middle
124
questionbank

Что вы знаете о 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'а системы и обеспечения стабильности и предсказуемости работы приложений в производственной среде.