/proc/PID/limits: ограничения конкретного процесса
Проверьте soft и hard limits работающего процесса. Отличите предел от текущего расхода и настройки своей оболочки от ограничений запущенного сервиса.
Почему ulimit вашего терминала недостаточно
Сервис сообщает, что не может открыть ещё один файл, а в вашем терминале лимит кажется большим. Эти два наблюдения могут относиться к разным процессам и способам запуска. Изменение текущей оболочки не доказывает изменения уже работающего сервиса.
Практическая цель — прочитать ограничения выбранного PID, записать единицы и только после этого сравнивать их с расходом ресурса. Учебный пример не повышает лимиты: сначала нужно убедиться, что найдено нужное ограничение.
Мягкая граница, жёсткая граница и единицы
В limits для каждого ресурса показаны soft limit, hard limit и единица. Soft определяет действующий предел, hard ограничивает его изменение непривилегированным процессом. Слово unlimited не означает бесконечные физические ресурсы машины.
Это настройки ограничения, а не счётчики текущего использования. Строку Max open files нельзя читать как число уже открытых файлов. Для фактических дескрипторов исследуйте fd; ограничения cgroup также рассматриваются отдельно от таблицы rlimit.
Прочитайте строку открытых файлов
Сначала выведите таблицу собственной оболочки, затем отдельную строку. При проверке сервиса замените limits_pid на его проверенный актуальный PID.
limits_pid=$$
cat "/proc/$limits_pid/limits"
grep -F "Max open files" "/proc/$limits_pid/limits"Сопоставляйте один и тот же объект
Допустим, в самостоятельно заданном примере soft равен 512, hard равен 4096. Это не означает 3584 свободных места и не означает, что процесс уже открыл 512 файлов. Свободный запас нельзя получить вычитанием двух колонок ограничений.
Если ошибка появилась у службы, приложите к наблюдению её PID и способ запуска. Проверка новой интерактивной Bash отвечает на другой вопрос. Изменять лимит наугад тоже рано: утечка дескрипторов может лишь проявиться позже при большей границе.
Проверьте своё рассуждение
Задача: вы увеличили лимит в новой оболочке и снова прочитали старый PID службы. Почему значение могло остаться прежним?
Вы поменяли окружение запуска другого процесса. Нужно исследовать конфигурацию менеджера службы и жизненный цикл нужного экземпляра. Сам факт изменения ulimit в соседнем терминале не является настройкой работающего PID.
Один ресурс может иметь несколько ограничений
Ошибка выделения ресурса не всегда объясняется первой похожей строкой limits. На результат влияют глобальные пределы ядра, права, cgroups и собственные настройки программы. Прежде чем планировать изменение, зафиксируйте текст ошибки и проверьте, какой механизм действительно отказал.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Linux man-pages — proc_pid_limits(5)
- Linux man-pages — getrlimit(2)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Нужны собственная Linux-система, смонтированный procfs и Bash. Доступность полей зависит от ядра, его конфигурации, прав и пространств имён. Примеры только читают диагностические интерфейсы; браузерный симулятор их не реализует.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.