Вопрос или проблема
Каждый раз, когда я пытаюсь переключиться на testuser, я получаю сообщение о временной недоступности ресурса. Параметры nproc и nofile установлены на 65k. testuser запускает несколько программ на Java. Не превышал значения nproc и nofile (подтверждено с помощью команд ps и lsof) для testuser.
Содержимое /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
testuser soft nofile 65535
testuser hard nofile 65535
Это система CentOS 7, работающая на мощном сервере Dell 64bit.
Что еще может быть проблемой?
Это сработало для меня на CentOS7.
Ниже приведен мой /etc/security/limits.d/20-nproc.conf
файл.
* soft nproc 4096
root soft nproc unlimited
jenkins soft nproc 65535
У меня была проблема с пользователем Jenkins – не позволяло переключиться на Jenkins. Эта ссылка RedHat помогла мне, хотя решение предназначено для RHEL4/5/6, но оно сработало для CentOS7.
Ответ или решение
Проблема, с которой вы столкнулись в CentOS 7, при попытке переключиться на пользователя testuser и получении сообщения "Resource temporarily unavailable", может быть связана с несколькими факторами, несмотря на то, что ограничения на количество процессов (nproc) и открытых файлов (nofile) настроены на 65 535. Давайте подробно рассмотрим возможные причины и решения.
1. Ограничения на количество процессов
Ваша конфигурация файла /etc/security/limits.conf
выглядит правильно. Однако важно убедиться, что настройки, находящиеся в /etc/security/limits.d/
, не конфликтуют с вашими основными настройками. Например, если в файле /etc/security/limits.d/20-nproc.conf
установлены более низкие лимиты процедур для * или для testuser, это может привести к упомянутой проблеме. Проверьте этот файл и убедитесь, что для testuser задано значение, позволяющее ему создавать процессы.
cat /etc/security/limits.d/20-nproc.conf
Если вы видите записи, ограничивающие данного пользователя, вам нужно добавить или изменить настройки.
2. Глобальные системные настройки
Параметры системы также могут накладывать ограничения на количество процессов или потоков, которые могут быть созданы. Проверьте настройки в файле /etc/sysctl.conf
и выполните команду sysctl -a
, чтобы убедиться, что нет глобальных ограничений, установленных для использования процессов.
Например, проверьте следующие параметры:
sysctl kernel.pid_max
Убедитесь, что значение достаточно высоко, чтобы поддерживать требуемое количество процессов.
3. Проверка текущих процессов и ресурсов
Хотя вы уже провели анализ с помощью ps
и lsof
, рекомендую более глубоко проанализировать активные процессы и активные соединения с помощью:
ps -u testuser
lsof -u testuser
Убедитесь, что у пользователя testuser нет "застревших" процессов, которые могли бы исчерпать лимиты, даже если они не отображаются непосредственно.
4. Настройки системы и конфигурации
Также стоит проверить, есть ли в системной конфигурации другие ограничения, такие как настройки SELinux. Если SELinux включён, он может блокировать создание новых процессов в зависимости от политик, установленных в системе. Проверьте статус SELinux с помощью:
sestatus
Если SELinux активно, попробуйте временно отключить его для проверки:
setenforce 0
Если после этого переключение на пользователя testuser проходит успешно, необходимо будет донастроить правила SELinux.
5. Операционная система и приложения
Иногда приложения могут напрямую ограничивать ресурсы. В вашем случае, если запускаемые Java-программы создают значительное количество потоков, стоит проверить их параметры запуска. Убедитесь, что они настроены для оптимального использования ресурсов и могут корректно работать при текущих лимитах.
Итоги
Резюмируя, проблема "Resource temporarily unavailable" может возникать по нескольким причинам. Внимательное рассмотрение конфигурации лимитов в /etc/security/limits.conf
и /etc/security/limits.d/
, а также системных настроек и состояния процессов, может помочь вам найти и устранить источник проблемы. Если возможно, используйте и отладочные инструменты, которые помогут проанализировать поведение системы при выполнении задач.
Если вы уже попробовали все вышеперечисленные шаги, порекомендуйте проверить наличие обновлений для системы, чтобы устранить возможные ошибки или конфликтные ситуации в самой ОС.