Pregunta:
Recientemente, comenzamos a probar la carga de nuestra aplicación y notamos que se quedaron sin descriptores de archivo después de aproximadamente 24 horas.
Ejecutamos RHEL 5 en un Dell 1955:
CPU: 2 x Dual Core 2.66GHz 4MB 5150 / 1333FSB RAM: 8GB RAM HDD: 2 x 160GB 2.5 "Discos duros SATA
Verifiqué el límite del descriptor de archivo y se estableció en 1024. Teniendo en cuenta que nuestra aplicación podría tener aproximadamente 1000 conexiones entrantes, así como 1000 conexiones salientes, esto parece bastante bajo. Sin mencionar los archivos reales que deben abrirse.
Mi primer pensamiento fue simplemente aumentar el parámetro ulimit -n en unos pocos órdenes de magnitud y luego volver a ejecutar la prueba, pero quería conocer las posibles ramificaciones de establecer esta variable demasiado alta.
¿Existen mejores prácticas para configurar esto además de averiguar cuántos descriptores de archivo puede abrir nuestro software teóricamente?
Respuesta:
Estos límites provienen de una época en la que varios usuarios "normales" (no aplicaciones) compartían el servidor y necesitábamos formas de protegerlos del uso de demasiados recursos.
Son muy bajos para servidores de alto rendimiento y generalmente los establecemos en un número muy alto. (24k más o menos) Si necesita números más altos, también debe cambiar la opción sysctl file-max (generalmente limitada a 40k en ubuntu y 70k en rhel).
Configuración de ulimit:
# ulimit -n 99999
Archivos de Sysctl max:
#sysctl -w fs.file-max=100000
Además, y muy importante, es posible que deba verificar si su aplicación tiene una pérdida de memoria / descriptor de archivo. Use lsof para ver todo lo que tiene abierto para ver si son válidos o no. No intente cambiar su sistema para evitar errores de aplicaciones.