Вопрос или проблема
У меня есть старый код, которому требуется, чтобы стек не был ограничен 8192 Кб для его выполнения.
Я привык делать это в /etc/security/limits.conf
* stack hard unlimited
* stack soft unlimited
Однако в RHEL 7.9, имея локальную учетную запись с оболочкой bash, когда я выполняю ulimit -s
, она все еще отвечает 8192
. Так что мое изменение limits.conf, похоже, не влияет?
В моем терминальном окне с оболочкой bash, если я сначала выполню ulimit -s unlimited
, а затем запущу свой код, он работает нормально.
Какой наилучший способ установить размер стека на неограниченный для всех пользователей в RHEL 7.9 глобально?
Я что-то упускаю? ulimit
и /etc/security/limits.conf
— это не одно и то же?
Использование команды ulimit для установки ограничений изменит пределы только для текущего запущенного процесса (оболочки) и его дочерних процессов.
Например, если вы сделаете:
#От имени root
ulimit -s unlimited
#Переключиться на другого пользователя
su - <user>
ulimit -s ## неограниченно; так как это все еще дочерний процесс
Но если вы сделаете:
#От имени root
ulimit -s unlimited
#Выход
logout
#Войти как другой пользователь и затем выполнить следующее
ulimit -s ## 8192
Использование /etc/security/limits.conf установит их на постоянной основе, но вам нужно выполнить перелогин (новая сессия), чтобы они стали эффективными.
Если установка стека в /etc/security/limits.conf неэффективна, то проверьте, не перекрывается ли это в /etc/security/limits.d/ или посмотрите в файлы профиля ~/.bash_profile ~/.bashrc.
Также проверьте, доступно ли вышеуказанное в /etc/pam.d/password-auth и /etc/pam.d/system-auth, чтобы быть уверенным, что /etc/security/limits.conf загружается:
session requires pam_limits.so
Ответ или решение
Чтобы решить проблему с установкой размера стека в RHEL 7.9, важно понять, почему внесенные изменения в /etc/security/limits.conf
не влияют на размер стека как ожидалось.
Понимание проблемы
Во-первых, необходимо осознать, что изменение лимитов ресурсов через команду ulimit
влияет только на текущую сессию и дочерние процессы. Это локальные изменения, которые не распространяются на все системы или новые сеансы. Когда вы задаете:
ulimit -s unlimited
Это воздействует только на текущий shell, в котором вы находитесь, и не будет применяться к будущим сессиям после выхода.
Настройки в /etc/security/limits.conf
Файл /etc/security/limits.conf
и файлы в директории /etc/security/limits.d/
предназначены для постоянной установки лимитов на уровне системы. Однако, изменения в этом файле вступают в силу только для новых сессий shell, после выхода и повторного входа в систему.
Потенциальные причины проблемы
-
Конфликтующие параметры в
/etc/security/limits.d/
:- Проверьте наличие файлов в директории
/etc/security/limits.d/
, которые могут переопределять ваш параметрstack
.
- Проверьте наличие файлов в директории
-
Не загружен модуль pam_limits:
- Убедитесь, что строка
session required pam_limits.so
присутствует в файлах/etc/pam.d/password-auth
и/etc/pam.d/system-auth
.
- Убедитесь, что строка
-
Использование пользовательских скриптов:
- Проверьте файлы пользователя, такие как
~/.bash_profile
,~/.bashrc
, которые могут переопределять параметры, установленные через PAM.
- Проверьте файлы пользователя, такие как
Решение
-
Откройте и проверьте существующие настройки в
/etc/security/limits.conf
. Этот файл должен содержать строки:* stack hard unlimited * stack soft unlimited
-
Проверьте все файлы в
/etc/security/limits.d/
на возможные конфликты и переопределения. -
Убедитесь, что строка
session required pam_limits.so
включена в обоих PAM конфигурационных файлах/etc/pam.d/password-auth
и/etc/pam.d/system-auth
. -
Перепроверьте пользовательские файлы
~/.bash_profile
и~/.bashrc
на возможные конфликты с настройками лимитов. -
Для применения изменений требуется завершение текущей сессии и повторный вход в систему. Если изменения все еще не действуют, попробуйте перезагрузить систему для снятия всех кэшированных настроек.
Заключение
Если после выполнения всех этих шагов проблема не исчезает, может понадобиться проведить более тщательную проверку системных настроек и, возможно, рассмотреть другие конфигурационные файлы, которые могут влиять на поведение ulimit
.