¿Por qué la cantidad de archivos abiertos en Linux es limitada?

¿Por qué la cantidad de archivos abiertos en Linux es limitada?

Ahora mismo sé cómo:

  • encontrar límite de archivos abiertos por proceso:ulimit -n
  • cuente todos los archivos abiertos por todos los procesos:lsof | wc -l
  • obtener el número máximo permitido de archivos abiertos:cat /proc/sys/fs/file-max

Mi pregunta es: ¿Por qué hay un límite de archivos abiertos en Linux?

Respuesta1

La razón es que el sistema operativo necesita memoria para administrar cada archivo abierto, y la memoria es un recurso limitado, especialmente en sistemas integrados.

Como usuario root, puede cambiar el número máximo de archivos abiertos por proceso (a través de ulimit -n) y por sistema (por ejemplo echo 800000 > /proc/sys/fs/file-max).

Respuesta2

Tenga en cuenta que esto lsof | wc -lresume muchas entradas duplicadas (los procesos bifurcados pueden compartir identificadores de archivos, etc.). Ese número podría ser mucho mayor que el límite establecido en /proc/sys/fs/file-max.

Para obtener el número actual de archivos abiertos desde el punto de vista del kernel de Linux, haga esto:

cat /proc/sys/fs/file-nr

Ejemplo: este servidor tiene 40096 de un máximo de 65536 archivos abiertos, aunque lsof informa un número mucho mayor:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504

Respuesta3

Creo que se debe en gran medida a razones históricas.

Un descriptor de archivo Unix es un intvalor pequeño, devuelto por funciones como openy creaty pasado a read,, etc.writeclose

Al menos en las primeras versiones de Unix, un descriptor de archivo era simplemente un índice en una matriz de estructuras por proceso de tamaño fijo, donde cada estructura contiene información sobre un archivo abierto. Si no recuerdo mal, algunos de los primeros sistemas limitaban el tamaño de esta tabla a aproximadamente 20.

Los sistemas más modernos tienen límites más altos, pero han mantenido el mismo esquema general, en gran medida por inercia.

información relacionada