El servidor tiene bastante carga: unos cientos de solicitudes por segundo. La gran mayoría de ellos es a través de SSL.
El problema es que la primera solicitud a través de HTTPS al servidor encuentra una respuesta muy lenta (como 10), incluso si la base de datos no está involucrada. Las siguientes solicitudes se realizan en un abrir y cerrar de ojos. Al mismo tiempo, sin SSL, funciona rápido y constantemente. Hace unos días la situación era inversa: la mayor parte del tráfico se realizaba sin SSL y luego era rápido sin SSL y con SSL lento.
Quiero que las conexiones pasen por SSL, pero la primera respuesta después de un tiempo de falta de actividad a un nivel de aproximadamente 10 segundos es inaceptable. ¿Qué podría cambiar probablemente en la configuración de Apache2 para evitar la primera respuesta lenta?
Respuesta1
Parece que estás vinculado a la CPU en el intercambio de claves. Problema comun. Cuando un cliente se conecta a través de SSL/TLS por primera vez, se realiza un intercambio de claves (muy costoso desde el punto de vista computacional). Una vez completado este intercambio de claves, los clientes podrán reutilizar las claves obtenidas en el intercambio en la siguiente comunicación. Es por eso que la primera solicitud a través de HTTPS tarda tanto en completarse.
Es muy poco lo que puede hacer ante esta situación, aparte de agregar recursos. Más CPU acelerará los cálculos del intercambio de claves. Tener más memoria siempre es bueno. También puede configurar Apache para mantener las claves generadas en la memoria durante más tiempo, para evitar que los clientes rehagan el intercambio de claves.
También podría obtener algunas mejoras marginales en el rendimiento cambiando los trajes de cifrado o ajustando la longitud de las claves, pero normalmente no vale la pena.
Si va a ejecutar este tipo de carga durante un tiempo más prolongado, puede ser una buena idea descargar los cálculos SSL/TLS. Puede obtener una casilla separada (usando su proxy favorito), una tarjeta de aceleración SSL o incluso una casilla de descarga SSL/TLS especializada.
Respuesta2
Parece un problema de DNS. Verifique que DNS esté configurado en localhost y funcione correctamente, también verifiqueBúsquedas de nombre de hostLa directiva está desactivada en la configuración de Apache.
Respuesta3
Hay dos escenarios en los que puedo pensar:
- Verifique los registros de Apache y haga algo inteligente con ellos (errores, marcas de tiempo de los registros de acceso, etc.). Creo que esto es una posibilidad remota.
- O: le sugiero que le informe a Wireshark sobre cómo funciona el protocolo de protocolo de enlace SSL. Deberías ver dónde transcurren los 10: en el lado del servidor o en el lado del cliente. Supongo que abrir el almacén de claves o algo así lleva mucho tiempo, pero al principio debes rastrear el tráfico de la red en busca de marcas de tiempo. Háganos saber cómo te fue!
Respuesta4
He encontrado un problema. Tuve que apagar KeepAlive.
Había muchas conexiones nuevas cada segundo (200-300/s, a veces más). La mayoría de ellos no necesitaban que la conexión se mantuviera activa durante 5 segundos. Como resultado, el grupo de conexiones se utilizó rápidamente y todas las conexiones nuevas tuvieron que esperar a que la anterior finalizara después de los 5 segundos.
Parece que la opción KeepAlive es útil solo cuando el servidor puede mantener suficientes conexiones abiertas mientras la mayoría de los usuarios hacen algo especificado por el parámetro KeepAliveTimeout (como 5s en mi caso).
En otros casos, resulta realmente útil desactivarlo.