как узнать, достигли ли мы максимального значения fs.file-max

У меня была аналогичная проблема, когда сценарий, который я передал в RUN, не работал. Проблема связана с разрешениями, примененными в файле systemd -udevd.service. Вам нужно будет отключить некоторые из этих разрешений. Мое решение было извлечено из этого обсуждения .

Конечным содержимым файла /lib/systemd/system/systemd -udevd.service в моем случае былоследующим образом:

[Service]
Type=notify
OOMScoreAdjust=-1000
Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
Restart=always
RestartSec=0
ExecStart=/lib/systemd/systemd-udevd
KillMode=mixed
WatchdogSec=3min
TasksMax=infinity
MountFlags=slave
MemoryDenyWriteExecute=yes
RestrictRealtime=yes
RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6e

Быстрое решение, предложенное в приведенной мной ссылке, состоит в том, чтобы закомментировать последние семь строк следующим образом:

[Service]
Type=notify
OOMScoreAdjust=-1000
Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
Restart=always
RestartSec=0
ExecStart=/lib/systemd/systemd-udevd
#KillMode=mixed
#WatchdogSec=3min
#TasksMax=infinity
#MountFlags=slave
#MemoryDenyWriteExecute=yes
#RestrictRealtime=yes
#RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6e

Более длительное решение состоит в том, чтобы изучить влияние каждого из закомментированных флагов и закомментировать только те, которые применимы к вашим требованиям. Затем перезагрузите и перезапустите службу с помощью следующих команд или перезагрузите пи:

# systemctl daemon-reload
# systemctl restart systemd-udevd.service

-1
05.05.2020, 11:44
1 ответ

Это

[[ `lsof | wc -l` -gt 100000 ]] && echo "please increase the fs.file-max"

будет вводить в заблуждение. См. ссылку ниже.

На основе настройки RHEL 5 можно использовать выходные данные cat /proc/sys/fs/file-nr. Мы можем сравнить первое и последнее поля вывода. Первое поле показывает общее количество выделенных дескрипторов файлов , а последнее поле показывает максимальное количество дескрипторов файлов, которые могут быть выделены . Поэтому настройте проверку так, чтобы при достижении, скажем, 90%, отображалось предупреждение :

.
[[ $(echo "$(cat /proc/sys/fs/file-nr | cut -f1) / $(cat /proc/sys/fs/file-nr | cut -f3) * 100" | bc -l) -ge 90 ]] \
  && echo "90% reached. Please increase the fs.file-max"


Некоторая разница между выводами lsofи file-nr:

Параметр ядра файла -max относится к дескрипторам открытых файлов, а номер файла -nr дает нам текущее количество дескрипторов открытых файлов. Но lsof перечисляет все открытые файлы, включая файлы, которые не используют дескрипторы файлов, такие как текущие рабочие каталоги, файлы библиотек с отображением памяти и исполняемые текстовые файлы.

См. Ссылка

2
28.04.2021, 23:16

Теги

Похожие вопросы