2010-06-04 21 views
40

¿Alguien sabe de una buena herramienta de perfiles o biblioteca para Clojure?Herramienta de creación de perfiles para Clojure?

Yo preferiría algo que se pueda utilizar desde el REPL, en la línea de (with-profiling ...) en Allegro Common Lisp en el día.

¿Hay algo en esa línea?

¿O tiene alguna experiencia con perfiladores Java (no comerciales) que funcionan bien con Clojure?

Respuesta

28

Encontré VisualVM (vea here y here) para ser muy conveniente. Su uso con Clojure se ha descrito hace aproximadamente un año en this blog post; por lo que puedo ver, no está desactualizado de ninguna manera.

Tenga en cuenta que la GUI desde la que se inicia el profiler de VisualVM tiene un área de texto prominente donde se pueden introducir clases/paquetes para excluir de la creación de perfiles: los resultados me resultan más útiles cuando clojure.* está en esa lista.

+0

Gracias por el puntero. La parte del monitor (memoria de pila y uso de CPU) es útil. Pero estoy luchando para obtener algo útil del perfilador de la CPU. Perfilando una solución a un problema de Project Euler, el contribuyente principal de mi código está a 300 ms del tiempo de ejecución de varios minutos ... ¿Hay algo que le da al método "tiempo total" (tiempo empleado en la pila de llamadas) en lugar de "tiempo propio" (tiempo gastado en la pila de llamadas)? –

+0

Hay una pregunta de SO sobre eso en realidad, http://stackoverflow.com/questions/1892038/total-method-time-in-java-visualvm - el consejo de tomar una instantánea de los resultados de los perfiles y analizar que es bueno, eso le da una buena vista de "árbol de llamadas" con tiempos de método total incluidos. Una cosa más a tener en cuenta es que este es un lugar donde los espacios de nombres de un solo segmento pueden ser un problema (AFAICT fue la causa de que algunas funciones fueran "invisibles" en una sesión reciente de creación de perfiles que realicé junto con el Licenciador en #clojure). aunque no prometo que romperán las cosas en su caso particular. ;-) –

+0

Voy a aceptar su respuesta :) No es exactamente lo que estaba buscando, pero parece ser el más cercano disponible. Gracias. –

9

Acaba de encontrar profile in Clojure contrib.

No funciona para grandes cantidades de código (explotó con OutOfMemoryError en una solución Project Euler que VisualVM manejó muy bien) y requiere que inserte llamadas de creación de perfiles en las funciones que desea perfilar.

Aún así, es una mejor alternativa a VisualVM en los casos en que solo desea perfilar un par de funciones.

+2

Éste está obsoleto ahora. –

14

Hay una biblioteca newish Clojure que ofrece perfiles: https://github.com/ptaoussanis/timbre

+1

Este funciona. –

+0

Prefiero esto sobre VisualVM, ya que es liviano de usar y controlar. –

+0

Esto parece proporcionar solo perfiles para ClojureScript. –

3

rápida heads-up que he DEPRECATED perfiles de timbre para una nueva dedicada lib perfiles Clojure + ClojureScript en https://github.com/ptaoussanis/tufte.

Eso es básicamente un refinamiento de las cosas de Timbre, además de documentos dedicados.

El README incluye un comparison con herramientas de JVM como VisualVM, YourKit, etc.

Cuestiones relacionadas