¿Existe un límite (técnico o práctico) para el tamaño que puede configurar el número máximo de archivos abiertos en Linux? ¿Hay algunos efectos adversos si lo configura en un número muy grande (digamos 1-100M)?
Estoy pensando en el uso del servidor aquí, no en los sistemas integrados. Los programas que utilizan grandes cantidades de archivos abiertos pueden, por supuesto, consumir memoria y ser lentos, pero estoy interesado en los efectos adversos si el límite se configura mucho más de lo necesario (por ejemplo, memoria consumida solo por la configuración).
linux
files
limit
open-files
Sampo
fuente
fuente
Respuestas:
Sospecho que la razón principal del límite es evitar el consumo excesivo de memoria (cada descriptor de archivo abierto usa memoria del núcleo). También sirve como protección contra aplicaciones con errores que filtran descriptores de archivos y consumen recursos del sistema.
Pero dado lo absurdamente que muchos sistemas modernos de RAM han comparado con los sistemas de hace 10 años, creo que los valores predeterminados de hoy son bastante bajos.
En 2011, el límite rígido predeterminado para los descriptores de archivos en Linux aumentó de 1024 a 4096 .
Algunos programas (por ejemplo, MongoDB) usan muchos más descriptores de archivos que el límite predeterminado. La gente de MongoDB recomienda elevar este límite a 64,000 . He usado
rlimit_nofile
300,000 para ciertas aplicaciones.Siempre que mantenga el límite flexible en el valor predeterminado (1024), probablemente sea bastante seguro aumentar el límite rígido. Los programas tienen que llamar
setrlimit()
para aumentar su límite por encima del límite flexible, y todavía están limitados por el límite rígido.Vea también algunas preguntas relacionadas:
fuente
El impacto normalmente no sería observable, pero el módulo de E / S del núcleo tendrá que ocuparse de todos los descriptores de archivos abiertos y también podrían tener un impacto en la eficiencia de la memoria caché.
Dichos límites tienen la ventaja de proteger al usuario de sus propios errores (o de terceros). Por ejemplo, si ejecuta un pequeño programa o script que se bifurca indefinidamente, eventualmente se bloqueará en uno de los
ulimit
s y, por lo tanto, evitará una congelación de la computadora más intensa (posiblemente irrecuperable).A menos que tenga razones precisas para aumentar cualquiera de esos límites, debe evitarlo y dormir mejor.
fuente
Está técnicamente limitado al valor máximo de largo sin signo (C Lang), es decir, 4,294,967,295
Referencia:
fs.h
archivofuente
Creo que su preocupación es comprensible, pero lo más probable es que Linux no consuma mucha memoria para los descriptores de archivos configurados (pero no utilizados) :)
No recuerdo ese problema en mi carrera profesional durante los últimos 10 años.
Saludos.
fuente
Silencio tarde, pero esto debería ayudar a todos los demás a obtener la respuesta a esta pregunta. El límite práctico para el número de archivos abiertos en Linux también se puede contar utilizando el número máximo de descriptor de archivo que puede abrir un proceso.
He visto que se cambian los límites de un sistema a otro. Desde la página de manual de getlimit puede ver que
RLIMIT_NOFILE-1
especifica los límites internamente.Para verificar el valor RLIMIT_NOFILE puede usar la siguiente declaración para obtener una tupla
python -c "import resource; print(resource.getrlimit(resource.RLIMIT_NOFILE))"
La tupla devuelve resultados como (Soflimit, hardlimit). Para mí, en varios sistemas, los resultados son los siguientes
Nota: 9223372036854775807 este número simplemente significa infinito. Siempre alcanzará otros límites de recursos antes de llegar a esto. Si tiene que modificar el límite rígido en un sistema más allá de lo que es, tendrá que modificar los parámetros del kernel.
fuente