1

У меня есть Docker-контейнер с Redhat:

Red Hat Enterprise Linux Server release 6.2 (Santiago)

Хост ОС Linux Mint:

Linux Mint 19 Tara

Когда я запускаю в нем определенные команды и на хост-компьютере запускается Chrome, я получаю:

bash-4.1# su www
su: /bin/bash: Resource temporarily unavailable

Когда я закрываю Chrome на главном компьютере, команды работают как положено.

Я думаю, что у меня возникла какая-то проблема с ресурсами, но я не уверен, где искать - какой ресурс и проблема в ОС в контейнере Docker или в хост-ОС?

Я думал, что это могут быть открытые файлы:

$ lsof | wc -l <-- With Chrome
311424
$ lsof | wc -l <-- Without Chrome
181608

Но максимальное количество файлов на хосте установлено выше открытых файлов с запущенным Chrome:

$ cat /proc/sys/fs/file-max
3264936

Память тоже не проблема:

$ free -g <-- With Chrome
              total        used        free      shared  buff/cache   available
Mem:             31           8           5           2          17          19
Swap:             1           0           1

$ free -g <-- Without Chrome
              total        used        free      shared  buff/cache   available
Mem:             31          11           2           2          17          16
Swap:             1           0           1

Где еще я должен искать?

Обновить

У baelx правильный ответ, но есть некоторые дополнительные ресурсы, которые могут помочь другим людям в будущем.

Эта статья содержит полезную информацию о том, как определить количество процессов, запущенных каждым пользователем.

$ ps h -Led -o user | sort | uniq -c | sort -n

Также важно отметить, что команда nproc не имеет ничего общего с файлом nproc.conf.

В этой статье содержится информация о том, как идентификаторы пользователей хоста сопоставляются с идентификаторами пользователей контейнеров. В моем случае мой пользователь на хосте имеет идентификатор пользователя 1000. Пользователь www на хосте имеет также идентификатор пользователя 1000. В Chrome было открыто 1600+ процессов на хосте, принадлежащем пользователю с идентификатором 1000 (jbodnar), и контейнер не смог открыть другой процесс с идентификатором пользователя 1000 (www).

1 ответ1

0

Возможно, вы используете максимальный PID вашей системы или его ограничение. Вы можете увидеть, сколько всего процессов запущено:

ps -eLf | wc -l

Если приведенный выше результат равен 32 000, увеличьте kernel.pid_max до 65 534. Заметьте, ваша система будет поддерживать это увеличение, только если это 64-битная система. Вы можете использовать команду sysctl для достижения этой цели:

sysctl -w  kernel.pid_max=65534

В этот момент попробуйте снова запустить команду su . Если это не работает, посмотрите количество запущенных процессов Chrome:

ps -eLf | grep chrome | wc -l

Затем вы можете попытаться изменить номер nproc в Chrome в /etc/security/limits.conf - хотя это может потребоваться через /etc/security/limits.d/90-nproc.conf для RHEL 6.

Каждый файл должен использовать один и тот же синтаксис для описания количества открытых процессов. Вы можете попытаться изменить значение Chrome с 1024 на 2048(или, возможно, на большее, если проблема его оправдывает). Вы также можете попробовать настроить это значение для всех пользователей (обозначено звездочкой):

<user>       -          nproc     2048      <<<----[ Only for "<user>" user ]
  *          -          nproc     2048      <<<----[ For all user's ]

Источник

(Если у вас нет аккаунта, я бы порекомендовал его, так как там много хороших образовательных и вспомогательных материалов.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .