77 votos

Práctico máximo del archivo abierto descriptores (ulimit-n) para un alto volumen de sistema

Recientemente, hemos empezado a prueba de carga de nuestra aplicación y nos dimos cuenta de que se acabó de descriptores de archivo después de aproximadamente 24 horas.

Estamos ejecutando red hat enterprise linux 5 en un Dell de 1955:

CPU: 2 x Doble Núcleo a 2,66 GHz, 4MB 5150 / 1333FSB RAM: 8GB RAM Disco duro: 2 x 160 GB SATA de 2,5" Unidades de disco Duro

He comprobado el archivo descriptor de límite y se fijó en 1024. Teniendo en cuenta que nuestra aplicación podría tener cerca de 1000 conexiones entrantes así como 1000 conexiones salientes, esto parece bastante bajo. Por no hablar de cualquier archivos reales que deben abrirse.

Mi primer pensamiento fue para incrementar el ulimit-n parámetro por un par de órdenes de magnitud y, a continuación, vuelva a ejecutar la prueba, pero yo quería saber nada de posibles ramificaciones de ajuste de esta variable demasiado alto.

¿Hay alguna de las mejores prácticas para la creación de ese otro que averiguar cómo muchos de los descriptores de archivo de nuestro software, teóricamente, puede abrir?

73voto

Andrea Zonca Puntos 126

Estos límites de una época en que varios usuario "normal" (no apps) compartir el servidor, y necesitamos encontrar maneras de protegerlos por el uso de demasiados recursos.

Son muy bajos para servidores de alto rendimiento y que en general nos los puso a un número muy alto. (24k) Si necesita más números, también tienes que cambiar el archivo sysctl-max opción (generalmente limitado a 40k en ubuntu y 70k en rhel) .

Configuración de ulimit:

# ulimit -n 99999

Sysctl max archivos:

#sysctl -w fs.file-max=100000

También, y muy importante, usted puede comprobar si su aplicación tiene una memoria/archivo descriptor de la fuga. Uso lsof para ver todo lo que tiene para ver si son válidos o no. No se trata de cambiar el sistema para trabajar en torno a las aplicaciones de errores.

15voto

Usted siempre puede simplemente

cat /proc/sys/fs/file-nr

Durante la "alta carga" de la situación para ver cómo muchos de los descriptores de archivo en uso.

Como a un máximo de sólo depende de lo que usted está haciendo.

6voto

MarkR Puntos 2323

Si el archivo de los descriptores de sockets tcp, etc, entonces el riesgo de utilizar una gran cantidad de memoria para el socket de colchones y otros objetos de núcleo; esta memoria no va a ser intercambiables.

Pero de lo contrario, no, en principio no debería haber ningún problema. Consulte la documentación del kernel para intentar averiguar cuánto núcleo de memoria se va a utilizar, y/o de prueba.

Nos ejecutar servidores de base de datos con ~ 10k descriptores de fichero abiertos (sobre todo en real de archivos de disco) sin mayor problema, pero que son de 64 bits y tiene un montón de memoria ram.

El ulimit configuración es por proceso, pero hay una en todo el sistema de límite (32k creo por defecto)

2voto

Grahamux Puntos 450

Yo no estoy enterado de ninguna de las mejores prácticas. Es algo subjetivo, dependiendo de la función del sistema.

Recuerde que 1024 que estamos viendo es una per-límite de usuarios y no de todo el sistema de límite. Considere cómo muchas de las aplicaciones que se ejecutan en este sistema. Es este el único? Es el usuario que ejecuta esta aplicación hacer otra cosa? (Es decir, hacer que los seres humanos han de usar esta cuenta para iniciar la sesión y ejecutar secuencias de comandos que pueden huir?)

Dado que el cuadro es sólo la ejecución de esta solicitud y de la cuenta que ejecuta dicha aplicación es únicamente para ese objetivo, veo ningún daño en el aumento de su límite como usted sugiere. Si es en la casa de dev team, me gustaría preguntarle su opinión. Si es de un proveedor de terceros, que pueden tener requisitos específicos o recomendaciones.

1voto

Kyle Hodgson Puntos 1588

Me parece que esta es una de esas preguntas mejor contestada con "a prueba en un entorno de desarrollo". Recuerdo que hace años que el Sol se pusieron nerviosos cuando te equivocaste con esto, pero no nervioso. Es el límite en el momento en que también fue 1024, así que estoy un poco sorprendido de ver que es el mismo ahora para Linux, parece que debería ser más alto.

He encontrado el siguiente enlace educativo cuando busqué en google para encontrar respuestas a sus preguntas: http://www.netadmintools.com/art295.html

Y este también: http://stackoverflow.com/questions/1212925/on-linux-set-maximum-open-files-to-unlimited-possible

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: