license hobby espaƱol performance heroku

performance - hobby - Ocasionales peticiones lentas en Heroku



heroku storage (1)

Yo mismo he estado persiguiendo un problema similar, con poca suerte hasta ahora.

Supongo que la primera tarea sería recomendar NewRelic. Puede tener más información para usted en estos casos.

En segundo lugar, le sugiero que mire los tiempos de espera: cuánto tiempo estuvo en cola su solicitud. Busque NewRelic para esto, o hágalo usted mismo con el encabezado HTTP "hora de inicio" que Heroku agrega a su solicitud entrante (solo imprima ahora () menos "hora de inicio" como su tiempo de espera).

Cuando me fallaron en mi caso, traté de encontrar cosas que podrían salir mal, y aquí hay una lista (¿poco ortodoxa? ¿Extraña?)

1) DNS: ¿está realizando alguna llamada DNS en su vista? Estos pueden tomar un tiempo. Incluso las solicitudes de DNS para resolver nombres de host de base de datos, nombres de host de Redis, proveedores de servicios externos, etc.

2) Rendimiento de registro: Heroku recopila todos sus stdout usando su "Logplex", que luego drena a sus propios logdrains definidos, servicios como Papertrail, etc. No hay documentación sobre el rendimiento de esto, y escribe a stdout desde su El proceso podría bloquearse, teóricamente, por períodos mientras Heroku está limpiando los buffers que pueda tener allí.

3) Obtención de una conexión de base de datos: ¿no está seguro de qué marco de trabajo está utilizando, pero tal vez tenga un grupo de conexiones del que obtiene conexiones de base de datos y eso llevó tiempo? No aparecerá como tiempo de consulta, estará bloqueando el tiempo de su proceso.

4) Rendimiento de Dyno: Heroku tiene una función adicional que imprimirá, cada pocos segundos, algunas métricas del servidor (promedio de carga, memoria) en la salida estándar. Utilicé Graphite para graficarlos y buscar la correlación entre las métricas y los tiempos en los que vi un aumento de casos de "solicitudes lentas esporádicas". No me ayudó, pero podría ayudarte :)

Háganos saber lo que se le ocurre.

Estamos viendo un rendimiento inconsistente en Heroku que no está relacionado con el reciente problema de enrutamiento unicornio / inteligente.

Este es un ejemplo de una solicitud que normalmente toma ~ 150 ms (y 19 de cada 20 veces es el tiempo que tarda). Puede ver que en esta solicitud tardó aproximadamente 4 segundos, o entre 1 y 2 órdenes de magnitud más.

Algunas cosas a tener en cuenta:

  • La base de datos no fue el cuello de botella y solo gastó 25 ms haciendo consultas de base de datos.
  • tenemos más que suficientes dinamómetros, por lo que no creo que este fuera el cuello de botella (20 dobles dinámicos ejecutando unicornio con 5 trabajadores cada uno, solo recibimos 1000 solicitudes por minuto, un tiempo de respuesta promedio de 150 ms, lo que significa que deberíamos poder servir (60 / 0.150) * 20 * 5 = 40,000 solicitudes por minuto. En otras palabras, teníamos 40 veces la capacidad en dynos cuando se tomó esta medida.

Así que me pregunto qué podría causar estas peticiones lentas ocasionales. Como mencioné, anecdóticamente parece suceder en aproximadamente 1 de 20 solicitudes. Lo único en lo que puedo pensar es que hay un problema de vecinos ruidosos en las cajas, o que la capa de enrutamiento tiene un rendimiento inconsistente. Si alguien tiene información adicional o ideas sería curioso. Gracias.