Tengo un servidor web que ejecuta algunos servicios como , Apache
y algunas aplicaciones. En momentos de mucho tráfico, mi servidor parece no soportar la carga pesada. Cuando sucede, a menudo cuando intento acceder a una página recibo el siguiente mensaje de :Mysql
Redis
NodeJS
mysql
Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (99)
Este mensaje aparece de forma intermitente, de manera que la mayor parte del tiempo, si actualizo la página, este mensaje no vuelve a aparecer. Además, no creo que sea un problema en mi configuración de MySQL porque tengo el siguiente resultado de mysqltuner.pl todo el tiempo:
[OK] Highest usage of available connections: 74% (336/450)
De manera similar, Redis Server muestra un mensaje de problema para conectarse al servidor:
Could not connect to Redis at 127.0.0.1:6379
Estoy monitoreando mi servidor durante esos momentos y descubrí que aproximadamente 2G de RAM (sin hacer uso de ningún byte de SWAP para el proceso de Mysql, Redis o NodeJS. Después de pasar un tiempo investigando (sin un Norte a seguir) , leí algo sobre los puertos Ephemearal, así que intenté ajustar el net.ipv4.ip_local_port_range
parámetro para aumentar el rango de mi puerto (ajustar de 32768 61000
a 10000 65000
). ¡Los resultados fueron terribles! Mi servidor web aumenta su tiempo de respuesta de un promedio de 180 ~ 200 ms a aproximadamente 6000 ms. El promedio del servidor también aumenta mucho (¡pero los mensajes de error desaparecen!).
Mis aplicaciones NodeJS (todas) usan Socket.io y responden desde un puerto diferente en mi servidor. Estoy tratando de descubrir cuál es la solución al problema. ¿Es eso un problema de disponibilidad de puertos? ¿Por qué el ajuste del parámetro net.ipv4.ip_local_port_range ralentiza el servidor?
Configuración del servidor:
- Servidor Ubuntu x64
- Intel Xeon E5520 de cuatro núcleos
- 8 GB de RAM
- 2x 1000 GB SATA 2,5" 5.400 rpm (RAID 1)
- 2x 60 GB SSD 2,5" (RAID1) (las cosas de la base de datos van todas aquí)
Respuesta1
Si su pregunta es sobre cómo monitorear mejor su servidor durante las horas pico, lo cual es difícil de hacer cuando está en su punto máximo, buscaría alguna herramienta liviana para ayudar con el monitoreo. Arriba, ps y dfNo siempre lo cortes.
he usadorecogidopara capturar puntos de datos en mis particiones, memoria, CPU, apache, mysql y otras cosas. Captura los datos y guarda esos puntos de datos, luego necesitará alguna otra herramienta para recuperar los datos, por ejemploAlgunas interfaces web para mostrar los datos..
Luego, para solucionar problemas, tal vez una herramienta para atacar su servidor y crear un escenario de alto uso. Apache Benchmark (ab) o Siege son buenas herramientas para ello.