Tutoriales

Solucione el error «Demasiados archivos abiertos» en Linux

Si su experiencia con Linux lo expone/expone a un entorno de servidor Linux muy cargado, es probable que se haya topado con el infame «»Demasiados archivos abiertos» error.

Este error del sistema operativo Linux simplemente significa que el proceso tiene demasiados archivos (descriptores de archivos) abiertos y, por lo tanto, no puede abrir más archivos porque se ha alcanzado el límite máximo de archivos abiertos. A cada usuario o proceso del sistema en un entorno Linux se le asigna un límite de archivos abiertos bastante pequeño.

Este artículo discutirá «Demasiados archivos abiertos» es un error destacado en el entorno del sistema operativo Linux.

Comprender los descriptores de archivos de Linux

Toda la jerarquía del sistema operativo Linux se atribuye a archivos (ya sea una unidad de disco particionada, un socket de red o una representación de datos regulares/normales).En Linux, una vez que se abre un archivo, se identifica mediante un número entero no negativo llamado descriptor de archivo.

Los descriptores de archivos abiertos están tabulados y vinculados al proceso responsable de su existencia. Cada vez que se abre un nuevo archivo, se agrega inmediatamente a la tabla de descriptores de archivos abiertos del proceso como una nueva entrada.

LEER  Cómo crear un usuario Sudo en openSUSE Linux

Por ejemplo, considere el uso básico del comando cat de Linux para abrir un archivo de texto simple.Este Abierto() La llamada al sistema se usa para pasar el nombre del archivo como argumento antes de asignar un descriptor de archivo.

Este comando gato Luego use el descriptor de archivo asignado para interactuar con el archivo (mostrar su contenido). Cuando el usuario termina de previsualizar el archivo, cerca() La llamada al sistema se utiliza para cerrar finalmente el archivo.

En cualquier instancia dada de una operación de archivo, tres descriptores de archivo (todos abiertos de manera predeterminada) están vinculados a un solo proceso de archivo. Los tres descriptores de archivos están relacionados por sus propios símbolos únicos, como sigue:

  • 0 significa entrada estándar
  • 1 para salida estándar
  • 2 para error estándar

Compruebe los descriptores de archivos abiertos de Linux

En la gestión de archivos de Linux, se pueden asociar varios agentes del sistema y sus descriptores de archivo asignados (el número total de descriptores de archivo) para indicar de forma transparente los recursos del sistema utilizados.

Uso global de descriptores de archivos

podemos comprobar /proc/sys/fs/archivo-nr El primer campo del archivo tiene el siguiente contenido awk Comando de una línea:

$ awk '{print $1}' /proc/sys/fs/file-nr

12832
Comprobar descriptores de archivos

descriptor de archivo utilizado por cada proceso

Para verificar el uso del descriptor de archivo de un proceso, primero debemos verificar la ID del proceso de destino, luego en un lsof Ordenar.Por ejemplo, el uso de cada proceso gato El descriptor de archivo para un comando se puede determinar mediante:

Primer intento ayuda pd Comando para determinar el ID del proceso:

$ ps aux

luego implementar lsof comando para determinar el descriptor de archivo para cada proceso.

$ sudo lsof -p 3231
Compruebe cada descriptor de archivo de proceso
Compruebe cada descriptor de archivo de proceso

Este Nombre columna apunta al archivo exacto del descriptor de archivo y escribe La columna apunta al tipo de archivo.

Comprobar los límites del descriptor de archivos de Linux

Es un límite en la cantidad de archivos que un proceso puede tener abiertos en un momento dado. Puede ser un límite suave o un límite duro. Los usuarios sin privilegios pueden cambiar los límites flexibles (solo se pueden reducir), pero los usuarios privilegiados pueden cambiarlos por completo. Los usuarios privilegiados pueden cambiar el límite estricto.

límite por sesión

una examinacion límite suaveusar -Sn logotipo con Invadir Ordenar.

$ ulimit -Sn

Para verificar el límite duro, use -Hn logotipo con Invadir Ordenar.

$ ulimit -Hn
Compruebe el límite de archivos abiertos de Linux
Compruebe el límite de archivos abiertos de Linux

por límite de proceso

Aquí, primero recuperamos un proceso PID y pasarlo como una variable a proceso Sistema de archivos.

$ pid=3231
$ grep "Max open files" /proc/$pid/limits
Verifique el límite de archivos de Linux por proceso
Verifique el límite de archivos de Linux por proceso

Las columnas segunda y tercera apuntan a los límites suaves y duros, respectivamente.

Restricciones globales

Determina el total de descriptores de archivo de todo el sistema para todos los procesos que se fusionan.

$ cat /proc/sys/fs/file-max 
Verifique las restricciones globales de Linux
Verifique las restricciones globales de Linux

Solucione el error «Demasiados archivos abiertos» en Linux

Ahora que entendemos lo que hacen los descriptores de archivo, podemos corregir el error»Error de demasiados archivos abiertos» al aumentar el límite del descriptor de archivo en Linux.

Temporal (por sesión)

Este es el método recomendado.Aquí usaremos ulímite -n Ordenar.

$ ulimit -n 4096
$ ulimit -Sn
Cambiar los límites flexibles de Linux
Cambiar los límites flexibles de Linux

Hemos cambiado el límite blando de 1024 a 4096.

Cambiar límite suave a valor de límite duro 1048576 o más, necesitaremos acceso de usuario privilegiado.

$ ulimit -n 1048577
no se puede modificar limite operación no permitida
no se puede modificar limite operación no permitida

Aumento por límite de usuario

Aquí, tenemos que abrir /etc/security/limits.conf documento.

$ sudo nano /etc/security/limits.conf

En referencia a la captura de pantalla a continuación, puede adjuntar una entrada como esta:

                     
*                       soft             nofile         5000
*                        hard           nofile          2000000

También se recomienda especificar Una asociación con un descriptor de archivo.

Aumentar el límite de descriptores de archivo por usuario
Aumentar el límite de descriptores de archivo por usuario

Los cambios anteriores se aplican a todos los procesos. Debe volver a iniciar sesión o reiniciar el sistema para que los cambios surtan efecto.

Aumentar globalmente el límite de archivos abiertos

Abierto /etc/sysctl.conf documento.

$ sudo nano /etc/sysctl.conf

Las siguientes líneas se agregarán con el valor del descriptor de archivo deseado.

fs.file-max = 2000000
Aumente el límite del descriptor de archivos de Linux
Aumente el límite del descriptor de archivos de Linux

Guarde el archivo y vuelva a cargar la configuración:

$ sudo sysctl -p

Reinicie el sistema o vuelva a iniciar sesión.

Ahora estamos tratando con»Demasiados archivos abiertos» error en nuestro sistema Linux.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba