Muitos arquivos abertos

Muitos arquivos abertos

quando abro o Lutris e depois o cliente LOL, isso acontece. E o jogo nunca funciona bem. Tentei muitas coisas, mas nunca consegui alterar o limite de arquivos abertos. Como posso consertar isso?

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  

também há informações sobre meus limites

~$ 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  

Responder1

Quando a mensagem de erro "Too Many Open Files" é gravada nos logs, ela indica que todos os identificadores de arquivo disponíveis para o processo foram usados ​​(isso também inclui soquetes).

Na maioria dos casos, isso é o resultado do vazamento de identificadores de arquivos por alguma parte do aplicativo. ulimité um comando em Unix/Linux que permite definir limites do sistema para todas as propriedades. No seu caso, você precisa aumentar o número máximo de arquivos abertos para um número grande (por exemplo, 1.000.000):

ulimit -n 1000000

ou

sysctl -w fs.file-max=1000000

e /etc/security/limits.confou /etc/sysctl.confalterar:

fs.file-max = 1000000

Para determinar se o número de arquivos abertos está aumentando ao longo de um período de tempo, emita lsofrelatórios periódicos dos arquivos abertos em relação a um PID. Por exemplo:

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

Isto é especialmente útil se você não tiver acesso ao lsofcomando:

ls -al /proc/PID/fd

Diretrizes para definir limites

Responder2

Correr

less /proc/PID/limits

para verificar o limite suave real do máximo de arquivos abertos. Se você configurar ulimits, mas o número real ainda for baixo, revise como você inicia o processo. Por exemplo, o systemd assume os ulimits, e você deve usar configurações explícitas, melhor no nível do processo, para garantir que seu programa obtenha os limites de tempo de execução necessários.

Responder3

Eu acho que existem diferentes casos em que isso pode acontecer:

  1. Limite de todo o sistema (Corra cat /proc/sys/fs/file-maxpara ver o limite, para mim é 9223372036854775807)
  2. Máximo de instâncias de usuário (Run cat /proc/sys/fs/inotify/max_user_instances: costumava ser 128)
  3. Limite rígido de usuários ( Executar ulimit -nH:)1048576
  4. Limite flexível de usuários (Run ulimit -nS: costumava ser 1024)

1. Limite de todo o sistema

A regra geral do sistema pode ser ajustada colocando

fs.file-max = 9223372036854775807

em /etc/sysctl.conf. Este valor não foi problema para mim.

2. Máximo de instâncias de usuário

Para mim, esse valor foi muito baixo. Para corrigir isso, adicione ou edite esta linha novamente em/etc/sysctl.conf

fs.inotify.max_user_instances = 1024

3. e 4. Limite de usuário rígido ou flexível

Meu limite flexível de usuários também era muito baixo. Para corrigir isso, abra /etc/security/limits.conf(como root) e adicione esta linha:

<username>             soft    nofile 100000

(Substitua <username>pelo seu nome de usuário ou *para todos os usuários)

O limite máximo de usuários pode ser definido substituindo softpor hardna linha acima. Claro, você pode ter várias regras para limites rígidos e flexíveis ou usuários diferentes.

Colocando as coisas em prática

Talvez um logout e um novo login sejam suficientes para que as alterações sejam detectadas, mas apenas reiniciei o sistema para ter certeza.

informação relacionada