Linux: solucione el error «Demasiados archivos abiertos»

Este tutorial explica cómo resolver el error de Linux «Demasiados archivos abiertos».

Después de leer este artículo, comprenderá la causa del error que está recibiendo y sabrá cómo solucionarlo. No solo aprenderá a corregir el error, sino también a otros aspectos importantes de los procesos de archivos de su sistema operativo Linux.

El significado del error «Demasiados archivos abiertos»

Cuando un usuario ejecuta un proceso, el proceso tiene archivos asociados que contienen información sobre el uso del archivo. Por ejemplo, los descriptores de archivos pueden informar al kernel cómo acceder a un archivo o cómo manejarlo con otro recurso. Por ejemplo, cuando usamos una tubería para redirigir un proceso a otro.

Por defecto, cada proceso ejecutado en Linux tiene al menos 3 archivos asociados llamados File Descriptors : STDIN, STDOUT y STDERR. Su función se muestra en la siguiente tabla.

 

Descriptor de archivo
Número
Función

ESTÁNDAR
0
Se refiere al método de entrada del teclado.

SALIDA ESTÁNDAR
1
Imprime o redirige la salida, se refiere a la pantalla

STDERR
2
Imprime o redirige errores, se refiere a la pantalla

 

Hay un límite de descriptores de archivos, usuarios y procesos que se pueden ejecutar simultáneamente. Cuando se alcanza el límite y el usuario o el proceso intenta abrir descriptores de archivos adicionales, obtenemos el » Error de demasiados archivos abiertos «.

Por lo tanto, la solución a este error es aumentar el límite de descriptores de archivo que un usuario o proceso puede abrir.

Arreglando el error de Linux «Demasiados archivos abiertos»

Para verificar el límite de archivos descriptores para la sesión actual, ejecute el comando que se muestra a continuación.

ulímite -n

Como puede ver arriba, el límite es 1024.

Ahora, verifiquemos el límite de usuarios ejecutando el siguiente comando:

ulimit -u

Para conocer la cantidad de archivos actuales, puede usar el comando que se muestra en la captura de pantalla a continuación.

lsof | wc -l

El comando que se muestra a continuación se puede usar para aumentar el límite de archivos descriptores para resolver este error. Sin embargo, es posible que esto no funcione si se alcanza el límite especificado en los archivos de configuración.

Como puede ver, el sistema no nos permite aumentar el límite. En tal caso, necesitamos editar un par de archivos.

En el primer archivo a editar, verá dos tipos de límites: límites duros y suaves:

El límite duro representa el límite máximo permitido para el límite flexible. La edición del límite estricto requiere privilegios.

Por otro lado, el sistema utiliza el límite suave para limitar todos los recursos del sistema para ejecutar procesos. El límite flexible no puede ser mayor que el límite estricto.

Puede aprender límites duros y suaves con los comandos que se muestran en la siguiente captura de pantalla, dondeulímite -Snmuestra el límite suave yulímite -Hnmuestra el límite duro.

Primero, abra el siguiente archivo con privilegios:

sudo nano / etc / seguridad / limites.conf

Edite las líneas que se muestran a continuación aumentando el límite. En mi caso, aumenté el límite suave de 1024 a 2048. Aquí también puedes editar el límite duro si es necesario.

Luego, reinicie el daemon-reexec usando systemctl como se muestra a continuación.

sudo systemctl daemon-reexec

Abra una nueva terminal o reinicie la sesión para verificar que los cambios se realizaron correctamente e intente cambiar el ulimit nuevamente ejecutando el siguiente comando y cambie el límite por el que especificó en el archivo /etc/security/limits.conf .

ulimit -n 2048

Como puede ver arriba, el límite se actualizó con éxito.

En caso de que no te haya funcionado, abre el siguiente archivo con privilegios:

sudo nano /etc/systemd/system.conf _ _ _ _ _

Busque la línea DefaultLimitNOFILE= y cambie el primer número antes de los dos puntos, aumentando el límite. En mi caso lo aumenté de 1024 a 2048. Luego, cerré y salí del archivo guardando los cambios.

Además, abra el siguiente archivo con privilegios:

sudo nano /etc/systemd/user.conf _ _ _ _ _

Busque la misma línea y edítela, repitiendo los cambios realizados anteriormente.

Reinicie el demonio reexec nuevamente usando systemctl .

sudo systemctl daemon-reexec

Reinicie la sesión y use el siguiente comando, reemplazando 2048 con el límite que desea establecer y configurar en los archivos de configuración:

ulimit -n 2048

El siguiente comando devuelve el límite para todo el sistema:

cat / proc / sys / fs / file-max

Cambia el límite del sistema usando el siguiente comando:

sudo sysctl -w fs.file-max= < NuevoValor >

Para que el cambio sea permanente, edite el siguiente archivo con privilegios:

sudo nano / etc / sysctl.conf

Agregue la siguiente línea reemplazando <NewValue> con el nuevo límite que desea establecer:

fs.file-max = < NuevoValor >

Reinicie para aplicar nuevos cambios con el siguiente comando.

sudo sysctl -p

Eso es todo, después de aumentar el ulimit, el error » Demasiados archivos abiertos » debe corregirse.

Conclusión

Este error puede ser solucionado fácilmente por cualquier usuario de Linux. Linux ofrece diferentes formas de abordar este problema, no dude en probarlas todas para deshacerse de este error. Los pasos descritos anteriormente son válidos para muchas distribuciones de Linux, pero se realizan en distribuciones basadas en Debian. Si está interesado en obtener información sobre los descriptores de archivos, hemos publicado contenido específico sobre este tema que puede leer en este sitio. Los descriptores de archivos son un componente básico de todos los sistemas operativos.

Gracias por leer este tutorial que explica cómo solucionar el error “Demasiados archivos abiertos” en Linux. Siga siguiéndonos para obtener más artículos profesionales de Linux.