Corrección : ¡el tiempo de respuesta ( %D
) es μs no ms! 1
Esto no cambia nada sobre la rareza de este patrón, pero significa que es prácticamente menos devastador.
¿Por qué el tiempo de respuesta está inversamente correlacionado con la frecuencia de solicitud?
¿No debería el servidor responder más rápido cuando está menos ocupado manejando solicitudes?
¿Alguna sugerencia de cómo hacer que Apache "aproveche" menos carga?
Este patrón es periódico. Eso significa que se mostrará si las impresiones caen por debajo de las 200 solicitudes por minuto, lo que ocurre (debido a la actividad natural del usuario) desde altas horas de la noche hasta la madrugada.
Las solicitudes son POST muy simples que envían un JSON de menos de 1000 caracteres; este JSON se almacena (adjunto a un archivo de texto), eso es todo. La respuesta es solo "-".
Los datos que se muestran en los gráficos se registraron con el propio Apache:
LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance
fuente
Respuestas:
Este es un comportamiento común en los centros de datos. Las veces que su tiempo de respuesta es lento corresponde a lo que comúnmente se llama la ventana de lote. Este es un período de tiempo en el que se espera que la actividad del usuario sea baja y se puedan ejecutar procesos por lotes. Las copias de seguridad también se realizan durante este período. Estas actividades pueden agotar los recursos del servidor y las redes, causando problemas de rendimiento, como puede ver.
Hay algunos recursos que pueden causar problemas:
Solía
sar
investigar emitido así.atsar
se puede usar para recopilarsar
datos en archivos de datos diarios. Estos se pueden examinar para ver cómo es el comportamiento del sistema durante el día cuando el rendimiento es normal, y demasiado cuando el rendimiento es variable.Si está monitoreando el sistema con
munin
algún otro sistema que reúna y grafica la utilización de recursos, puede encontrar algunos indicadores allí. Todavía me parecesar
más preciso.Existen herramientas como
nice
yionice
que se pueden aplicar a los procesos por lotes para minimizar su impacto. Solo son efectivos para problemas de CPU o E / S. Es poco probable que resuelvan problemas con la memoria o la actividad de la red.Mover la actividad de respaldo a una red separada y reducir la contención de la red. Algunos software de respaldo se pueden configurar para limitar el ancho de banda que se utilizará. Esto podría resolver la contención de la red.
Dependiendo de cómo se activen los procesos por lotes, puede limitar la cantidad de procesos por lotes que se ejecutan en paralelo. En realidad, esto puede mejorar el rendimiento de los procesos por lotes, ya que probablemente estén experimentando la misma contención de recursos.
fuente
sar
podría ser útil. Encontré este: en.wikipedia.org/wiki/Sar_(Unix)Esta relación puede ocurrir en la otra dirección si los remitentes de la solicitud esperan a que se complete una solicitud anterior antes de enviar una nueva. En ese caso, el tráfico cae a medida que aumenta el tiempo de solicitud (por cualquier razón), debido a las colas del lado del cliente.
O puede ser un artefacto de su medición: si el gráfico anterior muestra las solicitudes completadas , a diferencia de las solicitudes entrantes , la tasa disminuirá a medida que aumente el tiempo de procesamiento de la solicitud (suponiendo una capacidad finita: D).
fuente
Aunque la respuesta de @ BillThor puede ser correcta, parece improbable que el período de baja carga esté completamente ocupado por los procesos de respaldo (es decir, que los períodos coincidan con precisión).
Una explicación alternativa es simplemente el almacenamiento en caché. Si una secuencia de comandos / base de datos / lo que sea que no se haya utilizado recientemente, los datos en caché relevantes pueden haberse eliminado para liberar memoria para el resto del sistema operativo. Esto podría ser índices en una base de datos, o almacenamientos intermedios de O / S en relación con un archivo, o cualquier otra cosa similar. Una consulta tendrá que reconstituir esta información si ha pasado un tiempo desde la última consulta. En períodos ocupados esto no ocurrirá ya que la última consulta habrá sido frecuente. Esto también explicaría por qué está viendo tiempos de respuesta bajos y tiempos de respuesta altos durante el período ocupado.
fuente
strace
el proceso de Apache, no vesread()
llamadas al sistema o algo similar? Eso sería bastante inusual.echo 3 > /proc/sys/vm/drop_caches
cada 5 segundos durante un minuto y vea si obtiene efectos similares en el tiempo de respuesta.Lo que estás viendo allí parece, para mí, que podría ser un problema estadístico. Puede que no sea así, la respuesta de @ BillThor bien podría ser correcta, pero publicaré esto para completar.
Los gráficos de tiempo de respuesta están basados en percentiles. Un grupo de muestras de 800-1000 solicitudes es un buen recuento de muestras para esto, un grupo de 50-100 solicitudes tal vez no tanto.
Si supone que el número de solicitudes lentas no es una función lineal del volumen de la solicitud, de modo que un aumento de orden de magnitud en las solicitudes no da como resultado un aumento de orden de magnitud en las solicitudes lentas, entonces mayores volúmenes de solicitudes darán como resultado menor tiempo promedio de solicitud.
fuente
Hay mentiras, grandes mentiras y estadísticas.
Mi hipótesis: tienes tres categorías distintas de solicitudes:
Por la noche, las 50 solicitudes por minuto corresponden 20 + 20 + 10. Y así, el resultado del percentil del 50% ahora depende en gran medida del resultado de la secuencia 2. Y el percentil del 95% depende de la secuencia 3, por lo que nunca puede aparecer en el gráfico.
Durante el día, las transmisiones 2 + 3 están bien ocultas por encima del percentil 95%.
fuente
Cuanto más lo miro, más me inclino a pensar que hay un problema con la recopilación de datos.
En primer lugar, hay algo realmente extraño con tu TPS. Si bien el patrón general parece normal, se produce una ruptura muy pronunciada aproximadamente a las 9 p.m. y luego nuevamente a las 7 a.m. Un gráfico normal será mucho más suave durante la transición a las horas de menor actividad.
Eso sugiere que hay un cambio en el perfil, y posiblemente tenga 2 tipos distintos de clientes:
La segunda pista es alrededor de las 18:00. La mayoría de las veces, antes y después, tenemos el perfil de alto volumen: TPS alto y baja latencia. Pero alrededor de las 18:00 hay una caída repentina de 800-1000 RPM a menos de 400 RPM. ¿Qué podría causar eso?
La tercera pista es la reducción en los tiempos de respuesta del 5to percentil. De hecho, prefiero mirar los tiempos de respuesta mínimos (pero el quinto percentil es posiblemente mejor) por dos razones: me indica el tiempo de servicio (es decir, el tiempo de respuesta menos la cola), y los tiempos de respuesta tienden a seguir una distribución de Weibull, lo que significa que el modo (o el valor más común) está justo por encima del mínimo.
Entonces, la reducción en el 5to percentil me dice que hay una interrupción repentina en la serie, y el tiempo de servicio en realidad ha disminuido a pesar de que tanto la varianza como los tiempos de respuesta promedio han aumentado considerablemente.
Próximos pasos
En esta etapa, haría una inmersión profunda en los registros para descubrir qué hay de diferente en las muestras de bajo volumen de las 18:00 en comparación con las muestras de alto volumen antes y después.
Yo buscaría:
Por cierto, el "evento" de las 18:00 es suficiente evidencia para mí de que no tiene nada que ver con la congestión / actividad del centro de datos. Para que eso sea cierto, la congestión tendría que causar una caída en el TPS, que es posible a las 18:00 pero extremadamente improbable que cause una caída sostenida y curva suave en el TPS durante 10 horas entre las 9 p.m. y las 7 a.m.
fuente