2010-11-03 6 views
7

He hecho algunos experimentos usando Apache Bench para perfilar los tiempos de respuesta de mi código, y no genera el tipo correcto de información para mí. Espero que las buenas personas aquí tengan ideas.Alternativas a ApacheBench para crear un perfil de la velocidad de mi código

Específicamente, necesito una herramienta que

  • ¿El solicitudes HTTP través de la red (que no necesita hacer nada muy elegante)
  • Records tiempos de respuesta con la mayor precisión posible (al menos a una pocos milisegundos)
  • escribe los datos de tiempo de respuesta en un archivo sin más trámite (o lo hace a mi código, si una biblioteca)

que sé sobre ab -e, que imprime datos en un archivo. El problema es que esto solo imprime los datos cuantílicos, lo cual es útil, pero no lo que necesito. La opción ab -g funcionaría, excepto que no imprime datos por debajo del segundo, lo que significa que no tengo la resolución que necesito.

Escribí algunas líneas de Python para hacerlo, pero el httplib es terriblemente ineficiente y los resultados fueron inútiles. En general, necesito una precisión mayor de la que Python es más probable que brinde. Si alguien tiene sugerencias para una biblioteca utilizable de Python, soy todo oídos.

Necesito algo que sea de alto rendimiento, repetible y confiable.

Sé que la mitad de mis respuestas van a estar en la línea de "la latencia de internet hace que ese tipo de mediciones detalladas carezcan de sentido". En mi caso de uso particular, esto no es cierto. Necesito detalles de sincronización de alta resolución. Algo que realmente usara mi hardware HPET sería increíble.

Lanzando una recompensa aquí debido al bajo número de respuestas y vistas.

+1

Terminé construyendo una herramienta personalizada para tomar mis medidas usando una combinación de Python y libcurl. libcurl proporciona mediciones de temporización de buena resolución para cada parte del proceso de solicitud/respuesta http, lo que me permite obtener las medidas precisas que necesitaba. –

Respuesta

1

He hecho esto de dos maneras.

Con "loadrunner", que es un producto maravilloso pero bastante caro (creo que HP en estos días).

Con combinación de perl/php y el paquete Curl. Encontré la APLICACIÓN CURL ligeramente más fácil de usar de php. Es bastante fácil hacer tus propias solicitudes GET y PUT. También recomendaría ejecutar manualmente algunas solicitudes de muestra con Firefox y agregar las LiveHttpHeaders para capturar el formato exacto de las solicitudes http que necesita.

+0

Loadrunner suena como una gran pieza de software. Definitivamente fuera de mi presupuesto (y excesivo, realmente estoy haciendo estadísticas principalmente aquí). De hecho, solo necesito hacer solicitudes HEAD, pero la idea de usar curl como una biblioteca parece buena. –

+0

¿Sabes si curl puede convencerse de hacer el tiempo para las sesiones de keep-alive? –

+0

Solo una continuación aquí - Curl (libcurl en Python, en realidad) proporcionó una gran cantidad de información directamente relacionada con los puntos que quería investigar. Creo que construir las herramientas para mi propio problema es la respuesta correcta a veces. Como beneficio adicional, libcurl es mucho más eficiente que cualquier código de red que pueda escribir yo mismo. –

1

JMeter es bastante práctico. Tiene una GUI desde la que puede configurar sus peticiones y grupos de hilos y también se puede ejecutar desde la línea de comandos.

+0

Eso parece una herramienta práctica. Un poco exagerado para lo que necesito aquí, pero lo tendré en cuenta para otros proyectos. ¿Qué tan preciso es? Mi preocupación con herramientas más grandes como esa es que la GUI y todas las "otras cosas" pueden agregar ruido a mis resultados (de acuerdo, estoy buscando resultados más precisos de lo que la mayoría de las herramientas de benchmarking web están diseñadas para proporcionar). –

+0

En cuanto a la precisión: realice una prueba con ApacheBench (o lo que sea que confíe) y otra con JMeter. Si su servidor es coherente en cuanto a rendimiento, debe obtener resultados cercanos de ambas ejecuciones. De esta forma, puede asegurarse de que haya una sobrecarga de la GUI. – mindas

+0

@mindas Necesito mucha más precisión que una prueba como esa revelará. –

1

Si puede codificar en Java, puede ver la combinación de JUnitPerf + HttpUnit.

Lo malo es que tendrá que hacer más cosas usted mismo. Pero al precio de esto obtendrás flexibilidad ilimitada y posiblemente más precisión que con herramientas GUI, sin mencionar el análisis de HTML, la ejecución de JavaScript, etc.

También hay otro proyecto llamado Grinder que parece ser el propósito de una tarea similar pero no tengo ninguna experiencia con eso.

+0

Sí ... pero no necesito el análisis de HTML, javascript, etc. Solo necesito el tiempo que demora una solicitud para salir de mi máquina y para recuperar el inicio de una solicitud de HEAD. JUnitPerf es probablemente un nivel un poco más alto de lo que necesito, pero voy a echarle un vistazo. –

+0

Eché un vistazo a The Grinder. Parece estar más cerca de lo que estoy buscando, pero todavía tiene algunas ineficiencias que me preocupan. Por ejemplo, "HTTPClient envía un POST como dos PDU ... Esto es una consecuencia de la implementación conservadora de HTTP/1.1 pipelining en HTTPClient". –

0

he utilizado un script para conducir 10 cajas en el mismo interruptor para generar carga al "reproducir" solicitudes a 1 servidor. Tenía el tiempo de respuesta de registro de mi aplicación web (solo servidor) a la granularidad que necesitaba, pero no me importaba el tiempo de respuesta para el cliente. No estoy seguro de que le interese incluir el viaje hacia y desde el cliente en sus cálculos, pero si lo hizo no debería ser difícil codificar. Luego procesé mi registro con un script que extraía los tiempos por url y dispersaba gráficos de gráficos y gráficos de tendencia basados ​​en la carga.

Esto satisfizo mis necesidades que eran:

  • distribución en el mundo real de las llamadas a diferentes URL.
  • Tendencia del rendimiento en función de la carga.
  • No influye en la aplicación web ejecutando otras operaciones intensivas en el mismo cuadro.

lo hice controlador como un script de shell que foreach servidor inicia un proceso en segundo plano para recorrer todas las direcciones URL en un archivo llamando rizo en cada uno. Escribí el procesador de registro en Perl ya que estaba haciendo más Perl en ese momento.

1

httperf es muy potente.

+0

Incluyó la parte esencial: el nombre de la herramienta. – mmlac

Cuestiones relacionadas