Linux

Как увеличить ulimit в Linux: полное руководство и настройка лимитов

Узнайте, как безопасно увеличить лимиты ulimit в Linux, чтобы избежать ошибок «Too many open files» или отказов в выделении ресурсов. Гайд с примерами для сессий, systemd и постоянных настроек.

Обновлено 27 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04/24.04Debian 11/12CentOS 7/8/StreamRHEL 8/9ядро Linux 5.x+

Введение / Зачем это нужно

В Linux каждому процессу и пользователю назначаются ограничения на использование ресурсов: количество открытых файлов, запущенных процессов, память и другие объекты. Эти ограничения управляются командой ulimit. Если лимиты слишком низкие, приложения могут выдавать ошибки вроде «Too many open files» или отказываться создавать новые потоки и соединения.

После выполнения этого гайда вы научитесь временно и постоянно увеличивать лимиты ulimit для сессий, пользователей и systemd-сервисов, а также сможете выбирать подходящий метод в зависимости от задачи.

Требования / Подготовка

  • Сервер или ПК с Linux (Ubuntu, Debian, CentOS, RHEL).
  • Права пользователя с доступом к sudo или root для редактирования системных файлов.
  • Установленный текстовый редактор (nano, vim или другой).
  • Для настройки systemd — наличие управляемого сервиса, лимиты которого нужно изменить.

Шаг 1: Проверить текущие лимиты

Перед изменением узнайте текущие значения. Для текущей оболочки выполните:

ulimit -a

Эта команда покажет все лимиты: -n (максимум открытых файлов), -u (максимум процессов пользователя), стек и другие параметры.

Для проверки лимитов конкретного процесса используйте его PID:

cat /proc/<PID>/limits

Также можно проверить глобальный предел открытых файлов в системе:

cat /proc/sys/fs/file-max

Шаг 2: Временно увеличить лимиты в сессии

Если нужно быстро поднять лимиты для текущей оболочки или скрипта, используйте ulimit. Например, для мягкого лимита открытых файлов:

ulimit -n 65536

Для максимума процессов пользователя:

ulimit -u 16384

⚠️ Важно: такие изменения действуют только в текущей сессии и не сохранятся после перезапуска терминала или системы. Кроме того, мягкий лимит не может превышать жёсткий — проверить его можно командой ulimit -Hn.

Шаг 3: Настроить постоянные лимиты через limits.conf

Для постоянного увеличения лимитов по пользователям или группам отредактируйте /etc/security/limits.conf. Откройте файл с правами root:

sudo nano /etc/security/limits.conf

Добавьте строки по образцу:

# Для конкретного пользователя
username  soft  nofile  65536
username  hard  nofile  1048576
username  soft  nproc  16384
username  hard  nproc  32768

# Для группы
@groupname  soft  nofile  32768
@groupname  hard  nofile  524288

Здесь:

  • soft — мягкий лимит, который пользователь может повышать до жёсткого.
  • hard — жёсткий лимит, который может изменить только root.
  • nofile — максимум открытых файловых дескрипторов.
  • nproc — максимум процессов на пользователя.

Сохраните файл. Чтобы настройки применились, перезайдите в сессию пользователя или перезагрузите систему.

Шаг 4: Настроить лимиты для systemd-сервисов

Если лимиты нужны для сервиса, запускаемого через systemd, используйте drop-in-файлы. Например, для nginx:

sudo systemctl edit nginx

Добавьте секцию с нужными лимитами:

[Service]
LimitNOFILE=65536
LimitNPROC=16384

Сохраните файл, затем перезапустите сервис:

sudo systemctl daemon-reload
sudo systemctl restart nginx

Вы можете проверить применение лимитов командой:

systemctl show nginx --property=LimitNOFILE,LimitNPROC

Шаг 5: Применить системные лимиты через sysctl

Для глобального ограничения и увеличения максимума открытых файлов в системе настройте fs.file-max. Откройте /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Добавьте или измените строку:

fs.file-max = 2097152

Примените настройку:

sudo sysctl -p

Этот параметр влияет на всю систему, но не отменяет пользовательские и сервисные лимиты — он задаёт верхнюю границу для всех процессов вместе.

Проверка результата

Убедитесь, что лимиты применились:

  • Для текущей сессии: ulimit -a.
  • Для пользователя после перелогина: ulimit -n и ulimit -u.
  • Для systemd-сервиса: systemctl show <сервис> --property=LimitNOFILE,LimitNPROC.
  • Для процесса: cat /proc/<PID>/limits.

Если значения не изменились, проверьте, не переопределяются ли лимиты в /etc/security/limits.d/, настройках PAM или drop-in-файлах systemd.

Возможные проблемы

  • Лимиты не применяются для графических сессий — убедитесь, что PAM читает limits.conf, и при необходимости настройте /etc/pam.d/common-session.
  • systemd игнорирует limits.conf для своих сервисов — всегда используйте drop-in-файлы для systemd-юнитов.
  • Жёсткий лимит ниже нужного — повысьте его в limits.conf с ключом hard или временно через ulimit -Hn от root.
  • Ошибки выделения памяти или файлов после увеличения nofile — проверьте fs.file-max и доступную память, чтобы система могла обслуживать новые дескрипторы.

Часто задаваемые вопросы

Безопасно ли увеличивать nofile и nproc до десятков тысяч?
Почему после редактирования limits.conf ничего не изменилось?
В чём разница между мягким и жёстким лимитом?
Как проверить текущие лимиты для запущенного процесса?

Полезное

Проверить текущие лимиты
Временно увеличить лимиты
Настроить постоянные лимиты через limits.conf
Настроить лимиты для systemd-сервисов
Применить системные лимиты через sysctl
Проверить результат

Эта статья помогла вам решить проблему?