¿Por qué explota el tiempo de respuesta cuando cae la frecuencia de solicitud?


22

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?

ingrese la descripción de la imagen aquí

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

2
¿Es posible que algo esté causando presión en la memoria caché y, como resultado, tenga que volver a extraer cosas del disco? ¿Cómo se ve la actividad del disco?
TLW

2
¿Estas solicitudes llegan por minuto o las solicitudes se manejan por minuto?
user253751

¿Qué software usaste para registrar y trazar estos datos? Genuinamente curioso
Délisson Junio

1
@wingleader: grabado con Apache2 y tramado con R
Raffael

@immibis: vea la configuración de registro que agregué - Creo que es "llegada"
Raffael

Respuestas:


31

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:

  • Alta carga de CPU. Esto puede hacer que apache espere un intervalo de tiempo para procesar la solicitud.
  • Alto uso de memoria. Esto puede vaciar los buffers que permiten que apache sirva recursos sin leerlos del disco. También puede causar paginación / intercambio de trabajadores apache.
  • Alta actividad del disco. Esto puede hacer que la actividad de E / S del disco se ponga en cola con los retrasos correspondientes en la publicación del contenido.
  • Alta actividad de red. Esto puede hacer que los paquetes se pongan en cola para su transmisión, aumentar los reintentos y degradar el servicio.

Solía sarinvestigar emitido así. atsarse puede usar para recopilar sardatos 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 muninalgún otro sistema que reúna y grafica la utilización de recursos, puede encontrar algunos indicadores allí. Todavía me parece sarmás preciso.

Existen herramientas como nicey ioniceque 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.


1
Un enlace a sarpodría ser útil. Encontré este: en.wikipedia.org/wiki/Sar_(Unix)
Roger Lipscombe

Esto podría no solo ser copias de seguridad, los proveedores de VM pueden mover más VM a las mismas máquinas en tiempos de inactividad y apagar algunos bastidores para ahorrar energía (o de hecho, dedicarlos a tareas por lotes)
Jens Timmerman

8

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).


Por supuesto, esto solo está rascando la superficie de posibles razones, pero la declaración del problema de apertura no da mucho que ver. ¿Este proceso habla con algo más? ¿Qué tipo de solicitudes atiende? ¿La carga de trabajo cambia con el tiempo? Y así sucesivamente ....
Karol Nowak

perspectiva interesante pero no va bien con la periodicidad y duración de los síntomas
Raffael

7

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.


Especialmente si el almacenamiento en caché de consultas y / o el almacenamiento en caché de acceso al disco están involucrados. Además, si hay alguna estrategia de "reutilización de hilos", eso también ayuda.
mckenzm

No hay lectura de ningún tipo involucrada.
Raffael

1
@Raffael Dudo mucho que pueda garantizar "no hay lecturas de ningún tipo". A un nivel trivial, supongamos que las páginas de Apache están paginadas porque algo más quería la RAM. ¿Suponga que su MPM para Apache ha reducido la cantidad de subprocesos / procesos mientras las cosas están inactivas y hay gastos generales al crear nuevas? ¿Estás diciendo en serio que si ejecutas straceel proceso de Apache, no ves read()llamadas al sistema o algo similar? Eso sería bastante inusual.
Abligh

@abligh: bueno, correcto, mi "servicio" no implementa explícitamente nada que lea desde el disco
Raffael

@Raffael si desea probar el efecto del almacenamiento en caché del sistema operativo (solo), luego, durante un período ocupado, haga echo 3 > /proc/sys/vm/drop_cachescada 5 segundos durante un minuto y vea si obtiene efectos similares en el tiempo de respuesta.
Abligh

2

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.


1
si la observación solo comprendía de 50 a 100 solicitudes, entonces esto podría ser solo aleatoriedad, pero si observa el gráfico, verá que estamos hablando de 60 x 5 experimentos, cada uno con aproximadamente 50 a 100 solicitudes, eso definitivamente es suficiente para descartar aleatoriedad. Además, si observa detenidamente, verá un percentil medio estable que emerge a unos 2500 ms.
Raffael

No necesariamente, así no es exactamente cómo se comportan este tipo de estadísticas en masa. Por ejemplo, 1000 solicitudes durante 1 hora y 1000 solicitudes durante 1 minuto no se comportarán igual. También probablemente no esté sucediendo aquí. Los tamaños de muestra pequeños se comportan de manera extraña, en este caso es más como conjuntos de muestras de 60x5. El patrón podría ser el resultado de una carga no lineal.
Kaithar

0

Hay mentiras, grandes mentiras y estadísticas.

Mi hipótesis: tienes tres categorías distintas de solicitudes:

  1. El flujo variable normal que contiene la mayoría de las solicitudes y todas se completan dentro de 200-300 μs.
  2. Transmisión pequeña a una velocidad constante de aproximadamente 20 solicitudes por minuto (incluso de noche). Cada uno tarda aproximadamente 2.500 μs en completarse.
  3. Flujo minúsculo a una velocidad constante de aproximadamente 10 solicitudes por minuto (incluso de noche). Cada uno toma muy por encima de 4.000 μs.

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%.


¿Qué quieres decir con stream? Las solicitudes son absolutamente homogéneas, mientras que los clientes que lo solicitan son absolutamente heterogéneos.
Raffael

0

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:

  1. Uno que opera solo entre las 7 a.m. (ish) y las 9 p.m. (ish), a grandes volúmenes, y
  2. otro que probablemente opera las 24 horas, a volúmenes más bajos.

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:

  • diferencias en la ubicación geográfica (en caso de que la latencia afecte el $ request_time)
  • diferencias en URL (no debe ser ninguna)
  • diferencias en el método HTTP (POST / GET) (no debe ser ninguno)
  • solicitudes repetidas desde la misma IP
  • y cualquier otra diferencia ...

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.