Вопрос или проблема
Я на openSUSE Leap 15.6 x86_64, ядро 6.4.0-150600.23.25-default. Мой предел открытых файлов ulimit установлен очень низким – 1024. Хотя это никогда не было большой проблемой в системах на основе Debian, мне трудно понять, как на OpenSUSE увеличить его навсегда.
ulimit -Sn 10240
изменяет его временно, и я мог бы ввести его, вероятно, где-то в bashrc, но мне хотелось бы более чистого способа.
Я удивляюсь, почему это не работает:
/etc/security/limits.conf:
#<домен> <тип> <элемент> <значение>
#
* soft nofile 65535
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
Файл /etc/sysctl.conf и папка /etc/sysctl.d/ все закомментированы.
Файл /etc/pam.d/login содержит:
session include common-session
а /etc/pam.d/common-session содержит:
session required pam_limits.so
Несмотря на это, ограничения не применяются в соответствии с моими настройками или переопределены где-то еще. Аппаратный предел составляет 524288, так что он больше, чем указанные выше 65535.
Также:
cat /proc/1/cmdline
/usr/lib/systemd/systemd--switched-root--system--deserialize=32(base) n
Ответ или решение
Проблема с игнорированием ограничений ulimit на openSUSE может быть связана с особенностями конфигурации системы, особенно касающимися управления ресурсами через PAM (Pluggable Authentication Modules) и системные настройки. Давайте подробно рассмотрим шаги для постоянного изменения ограничения на количество открытых файлов.
Причины, по которым ограничения могут не применяться
-
Конфигурация PAM: Вы правильно указали, что в файле
/etc/pam.d/common-session
присутствует строкаsession required pam_limits.so
. Это позволяет PAM применять ограничения, указанные в/etc/security/limits.conf
. Однако, если используется другой модуль для управления сессиями или аутентификацией, возможны конфликты. -
Системные службы: Если ваше приложение или служба запускается как системная служба (например, через systemd), настройки из
/etc/security/limits.conf
не будут применяться. Вместо этого нужно использовать конфигурацию unit-файлов systemd для настройки ограничений. -
Отсутствие настройки в
/etc/security/limits.conf
: Обратите внимание, что ваш файлlimits.conf
закомментирован (вы используете#
перед строками). Это означает, что настройки в этом файле игнорируются. Убедитесь, что строки не закомментированы.
Корректные шаги для решения проблемы
-
Редактирование
/etc/security/limits.conf
:
Убедитесь, что у вас есть следующие строки без символов комментариев (#
):* soft nofile 65535 * hard nofile 65535
Эти строки установят как «мягкие», так и «жесткие» ограничения на число открытых файлов.
-
Настройка Service Unit файлов:
Если ваша служба управляется systemd, выполните следующие шаги:- Откройте/создайте файл конфигурации для вашей службы в
/etc/systemd/system/your-service.service.d/override.conf
(гдеyour-service
— это имя вашей службы). - Добавьте следующую секцию
Service
, где установите необходимые ограничения:[Service] LimitNOFILE=65535
- Сохраните файл и выполните команду:
sudo systemctl daemon-reload
- Затем перезапустите вашу службу:
sudo systemctl restart your-service.service
- Откройте/создайте файл конфигурации для вашей службы в
-
Проверка переменных окружения: Если вы хотите убедиться, что настройки применяются, выполните:
ulimit -Sn ulimit -Hn
Это покажет текущие «мягкие» и «жесткие» лимиты открытых файлов.
-
Перезагрузка системы: Если изменения не вступили в силу, попробуйте перезагрузить систему, чтобы убедиться, что все службы и сессии применяют новую конфигурацию.
Вывод
Следуя указанным шагам, вы сможете установить постоянное ограничение на количество открытых файлов в openSUSE. Убедитесь, что все файлы и настройки правильно настроены, и учитывайте, что для системных служб могут потребоваться дополнительные настройки в unit-файлах systemd. Если вы еще продолжаете сталкиваться с проблемами, проверьте журналы системы для поиска любых сообщений об ошибках или несовпадениях в конфигурации.