Слишком много открытых файлов

Слишком много открытых файлов

когда я открываю Lutris, а затем LOL клиент, это происходит. И игра никогда не работает хорошо. Я пробовал много вещей, но так и не смог изменить лимит открытых файлов. Как это исправить?

Waiting on children  
Waiting on children  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  

также есть информация о моих ограничениях

~$ ulimit -a  
core file size          (blocks, -c) 0  
data seg size           (kbytes, -d) unlimited  
scheduling priority             (-e) 0  
file size               (blocks, -f) unlimited  
pending signals                 (-i) 15106  
max locked memory       (kbytes, -l) 16384  
max memory size         (kbytes, -m) unlimited  
open files                      (-n) 1024  
pipe size            (512 bytes, -p) 8  
POSIX message queues     (bytes, -q) 819200  
real-time priority              (-r) 0  
stack size              (kbytes, -s) 8192  
cpu time               (seconds, -t) unlimited  
max user processes              (-u) 15106  
virtual memory          (kbytes, -v) unlimited  
file locks                      (-x) unlimited  

решение1

Когда в журналах появляется сообщение об ошибке «Слишком много открытых файлов», это означает, что все доступные дескрипторы файлов для процесса были использованы (включая сокеты).

В большинстве случаев это является результатом утечки дескрипторов файлов какой-либо частью приложения. ulimit— это команда в Unix/Linux, которая позволяет устанавливать системные ограничения для всех свойств. В вашем случае вам нужно увеличить максимальное количество открытых файлов до большого числа (например, 1000000):

ulimit -n 1000000

или

sysctl -w fs.file-max=1000000

и /etc/security/limits.confили /etc/sysctl.confизменить:

fs.file-max = 1000000

Чтобы определить, растет ли количество открытых файлов с течением времени, выполните команду lsofдля периодического отчета об открытых файлах по PID. Например:

lsof -p [PID] -r [interval in seconds, 1800 for 30 minutes] > lsof.out

Это особенно полезно, если у вас нет доступа к lsofкоманде:

ls -al /proc/PID/fd

Руководство по установке ulimits

решение2

Бегать

less /proc/PID/limits

для проверки фактического мягкого лимита Max open files. Если вы настроили ulimits, но фактическое число все еще низкое - проверьте, как вы запускаете процесс. Например, systemd берет на себя ulimits, и вам следует использовать явные настройки, лучше на уровне процесса, чтобы гарантировать, что ваша программа получит необходимые ей ограничения времени выполнения.

решение3

Я думаю, есть разные случаи, по которым это может произойти:

  1. Системный лимит (Запустите cat /proc/sys/fs/file-max, чтобы увидеть лимит, для меня это 9223372036854775807)
  2. Максимальное количество пользовательских экземпляров (Run cat /proc/sys/fs/inotify/max_user_instances: раньше было 128)
  3. Жесткое ограничение пользователей (Run ulimit -nH: 1048576)
  4. Мягкое ограничение пользователей (Run ulimit -nS: раньше было 1024)

1. Общесистемный лимит

Общесистемное правило можно настроить, указав

fs.file-max = 9223372036854775807

в /etc/sysctl.conf. Это значение не было для меня проблемой.

2. Максимальное количество пользовательских экземпляров

Для меня это значение было слишком низким. Чтобы исправить это, добавьте или отредактируйте эту строку еще раз в/etc/sysctl.conf

fs.inotify.max_user_instances = 1024

3. и 4. Жесткое или мягкое ограничение пользователей

Мой мягкий лимит пользователей тоже был слишком низким. Чтобы исправить это, откройте /etc/security/limits.conf(как root) и добавьте эту строку:

<username>             soft    nofile 100000

(Замените <username>на свое имя пользователя или *для всех пользователей)

Жесткий лимит пользователей можно установить, заменив softна hardв строке выше. Конечно, вы можете иметь несколько правил для жесткого и мягкого лимита или разных пользователей.

Претворение вещей в жизнь

Возможно, выхода из системы и повторного входа будет достаточно, чтобы изменения вступили в силу, но я просто перезапустил систему, чтобы убедиться в этом.

Связанный контент