когда я открываю 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
решение2
Бегать
less /proc/PID/limits
для проверки фактического мягкого лимита Max open files. Если вы настроили ulimits, но фактическое число все еще низкое - проверьте, как вы запускаете процесс. Например, systemd берет на себя ulimits, и вам следует использовать явные настройки, лучше на уровне процесса, чтобы гарантировать, что ваша программа получит необходимые ей ограничения времени выполнения.
решение3
Я думаю, есть разные случаи, по которым это может произойти:
- Системный лимит (Запустите
cat /proc/sys/fs/file-max
, чтобы увидеть лимит, для меня это9223372036854775807
) - Максимальное количество пользовательских экземпляров (Run
cat /proc/sys/fs/inotify/max_user_instances
: раньше было128
) - Жесткое ограничение пользователей (Run
ulimit -nH
:1048576
) - Мягкое ограничение пользователей (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
в строке выше. Конечно, вы можете иметь несколько правил для жесткого и мягкого лимита или разных пользователей.
Претворение вещей в жизнь
Возможно, выхода из системы и повторного входа будет достаточно, чтобы изменения вступили в силу, но я просто перезапустил систему, чтобы убедиться в этом.