Demasiados archivos abiertos

Demasiados archivos abiertos

Cuando abro Lutris y luego el cliente LOL, sucede esto. Y el juego nunca funciona bien. Intenté muchas cosas pero nunca pude cambiar el límite de archivos abiertos. ¿Cómo se puede solucionar esto?

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  

También está la información de mis límites.

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

Respuesta1

Cuando se escribe el mensaje de error "Demasiados archivos abiertos" en los registros, indica que se han utilizado todos los identificadores de archivos disponibles para el proceso (esto incluye también los sockets).

En la mayoría de los casos, esto es el resultado de que alguna parte de la aplicación filtre los identificadores de archivos. ulimites un comando en Unix/Linux que permite establecer límites del sistema para todas las propiedades. En su caso, necesita aumentar la cantidad máxima de archivos abiertos a una cantidad grande (por ejemplo, 1000000):

ulimit -n 1000000

o

sysctl -w fs.file-max=1000000

y /etc/security/limits.conf/o /etc/sysctl.confcambiar:

fs.file-max = 1000000

Para determinar si la cantidad de archivos abiertos está creciendo durante un período de tiempo, emita lsofinformes de los archivos abiertos contra un PID de forma periódica. Por ejemplo:

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

Esto es especialmente útil si no tienes acceso al lsofcomando:

ls -al /proc/PID/fd

Directrices para establecer ulimits

Respuesta2

Correr

less /proc/PID/limits

para verificar el límite suave real de archivos abiertos máximos. Si configura ulimits pero el número real aún es bajo, revise cómo inicia el proceso. Por ejemplo, systemd se hace cargo de los ulimits y usted debe usar configuraciones explícitas, mejor a nivel de proceso, para garantizar que su programa obtenga los límites de tiempo de ejecución que necesita.

Respuesta3

Creo que hay diferentes casos por los que esto podría suceder:

  1. Límite de todo el sistema (ejecute cat /proc/sys/fs/file-maxpara ver el límite, para mí es 9223372036854775807)
  2. Máximo de instancias de usuario (Ejecutar cat /proc/sys/fs/inotify/max_user_instances: solía ser 128)
  3. Límite estricto de usuarios ( Ejecutar ulimit -nH:)1048576
  4. Límite flexible de usuarios (Ejecutar ulimit -nS: solía ser 1024)

1. Límite en todo el sistema

La regla de todo el sistema se puede ajustar poniendo

fs.file-max = 9223372036854775807

en /etc/sysctl.conf. Este valor no fue un problema para mí.

2. Máximo de instancias de usuario

Para mí, este valor era demasiado bajo. Para solucionarlo, agregue o edite esta línea nuevamente en/etc/sysctl.conf

fs.inotify.max_user_instances = 1024

3. y 4. Límite de usuario estricto o flexible

Mi límite flexible de usuarios también era demasiado bajo. Para solucionarlo, abra /etc/security/limits.conf(como root) y agregue esta línea:

<username>             soft    nofile 100000

(Reemplazar <username>con su nombre de usuario, o *para todos los usuarios)

El límite estricto de usuarios se puede establecer reemplazándolo softpor harden la línea anterior. Por supuesto, puede tener varias reglas para límites estrictos y flexibles o para diferentes usuarios.

Poner las cosas en práctica

Tal vez cerrar sesión y volver a iniciarla sea suficiente para que se detecten los cambios, pero simplemente reinicié el sistema para estar seguro.

información relacionada