Назад | Перейти на главную страницу

Увеличение количества открытых файлов ulimit не применяется в RHEL 8.1

У меня есть полностью обновленная система Red Hat Enterprise Linux (RHEL) 8.1 x86_64, где в качестве локального пользователя в локальном терминале (т.е. не удаленно через SSH) при запуске ulimit -Sn это говорит 1024 и ulimit -Hn дает 4096. Я хотел бы увеличить эти цифры потому что часто, когда я компилирую большие проекты, такие как gcc, то make шаг потерпит неудачу с too many open files ошибка. Я даже пробовал переместить компиляцию в podman контейнер, но это не помогло, потому что контейнер только что унаследовал моего локального пользователя ulimitс.

Вот что я пробовал на хосте:

  1. В /etc/security/limits.conf Я добавил:
*          soft nofile 32767
*          hard nofile 65535
[username] soft nofile 32767
[username] hard nofile 65535
  1. Я проверил ls -a /etc/security/limits.d/ а файлов там нет.
  2. В /etc/sysctl.conf есть строка, в которой говорится fs.file-max = 65535. Я также побежал sysctl -p.
  3. я добавил session required pam_limits.so до конца файла /etc/pam.d/login.
  4. ls -a /etc/sysctl.d/ показал два файла ./ ../ 50-libreswan.conf 99-sysctl.conf@, ни один из них не содержал ничего, связанного с количеством открытых файлов.
  5. cat /proc/sys/fs/file-max говорит 65535.
  6. /etc/systemd/user.conf пуст (все строки закомментированы), и я попытался явно установить DefaultLimitNOFILE=65535.

Попробовав описанное выше, когда я бегу cat /proc/self/limits или prlimit, соответствующая строка вывода по-прежнему говорит:

NOFILE     max number of open files                1024      4096 files

Единственная подсказка, которая у меня есть прямо сейчас, заключается в том, что когда я использую приложение Gnome System Activity для просмотра своих процессов, когда у меня открыто окно терминала, есть два bash процессы, как под моим локальным пользователем. Как ни странно, когда я бегу cat /proc/[process id]/limits на двух процессах один показывает большой 32767 предел, но у другого есть оригинал 1024 предел. Думал проверить свой ~/.bashrc и ~/.bash_profile но они не меняют мой ulimit.

Я в тупике!

Что еще можно проверить и попробовать, чтобы увеличить свой ulimit -n? Мог systemd или SELinux тут причем? Спасибо за помощь.

РЕДАКТИРОВАТЬ: Предложение Per @ Gerrit, я побежал systemd-cgls который говорит, что практически все, что работает под моим локальным пользователем, находится под:

-.slice
├─user.slice
│ ├─user-1005.slice
│ │ ├─session-2.scope
│ │ │ └─[many entries here]
│ │ └─user@1005.service
│ │   └─[many entries here]

В настройке systemd до версии 240 все пользовательские процессы выполняются с ограничениями пользовательских ресурсов по умолчанию, предложенными ядром, которые в RHEL 8.1 кажутся равными 4096 для жесткого ограничения и 1024 для мягкого ограничения. В systemd 240 это было изменено, чтобы установить жесткое ограничение по умолчанию на 512 КБ, мягкое ограничение по умолчанию остается тем же, чтобы избежать проблем с программами, резервирующими память для каждого потенциального файлового дескриптора или других проблем совместимости.

Вы можете изменить установленный по умолчанию предел HARD для NOFILE в /etc/systemd/system.conf в разделе [Manager] с помощью параметра DefaultLimitNOFILE =. Для этого требуется перезагрузка.

После этого вы действительно можете поднять мягкий лимит по умолчанию NOFILE, установив его в /etc/security/limits.conf с участием * soft nofile nnnn. Добавление pam_limits в /etc/pam.d/login не требуется, по крайней мере, не в Centos 7, так как это уже включено через /etc/pam.d/system-auth.