2010-06-04 10 views
40

qualcuno conosce un buon strumento di profilatura o libreria per Clojure?Strumento di creazione profili per Clojure?

Preferirei qualcosa che potrebbe essere utilizzato dal REPL, lungo le linee (with-profiling ...) in Allegro Common Lisp nel corso della giornata.

C'è qualcosa in questo senso?

Oppure avete qualche esperienza con profilatori Java (non commerciali) che funzionano bene con Clojure?

risposta

28

Ho trovato VisualVM (vedere here e here) per essere molto conveniente. Il suo uso con Clojure è stato descritto circa un anno fa in this blog post; per quanto posso vedere, non è obsoleto in alcun modo.

Si noti che la GUI da cui si avvia il profiler VisualVM ha un'area di testo prominente in cui è possibile immettere classi/pacchetti da escludere dalla profilazione. Trovo i risultati piuttosto utili quando clojure.* si trova in tale elenco.

+0

Grazie per il puntatore. La parte del monitor - memoria heap e utilizzo della CPU - è utile. Ma sto lottando per ottenere qualcosa di utile dal profiler della CPU. Definizione di una soluzione per un problema di Project Euler, il contributore principale del mio codice è 300ms su un runtime di diversi minuti ... Esiste qualcosa che fornisce il metodo "tempo totale" (tempo trascorso sullo stack di chiamate) piuttosto che "self time" (tempo speso in cima allo stack delle chiamate)? –

+0

C'è una domanda SO su questo in realtà, http://stackoverflow.com/questions/1892038/total-method-time-in-java-visualvm - il consiglio di scattare un'istantanea dei risultati del profilo e analizzare ciò che è buono, che ti dà una bella vista "call tree" con i tempi di metodo totale inclusi. Un'altra cosa da tenere a mente è che questo è un posto in cui gli spazi dei nomi a segmento singolo possono essere un problema (AFAICT è stata la causa di alcune funzioni che sono "invisibili" in una sessione di profilazione recente che ho condotto insieme a Licenser in #clojure), anche se non prometterò che spezzeranno le cose nel tuo caso particolare. ;-) –

+0

Accetterò la tua risposta :) Non proprio quello che stavo cercando, ma sembra essere il più vicino disponibile. Grazie. –

9

Appena trovato profile in Clojure contrib.

Non funziona per grandi quantità di codice (si è verificato con OutOfMemoryError su una soluzione Project Euler gestita da VisualVM) e richiede l'inserimento di chiamate di profilatura nelle funzioni che si desidera profilare.

Ancora, è un'alternativa migliore a VisualVM nei casi in cui si desidera solo profilare un paio di funzioni.

+2

Questo è obsoleto ora. –

14

C'è una biblioteca piuttosto nuovo Clojure che offre profiling: https://github.com/ptaoussanis/timbre

+1

Questo funziona. –

+0

Preferisco questo su VisualVM, poiché è leggero da usare e controllare. –

+0

Questo sembra fornire profili solo per ClojureScript. –

3

rapida heads-up che ho deprecato profiling di Timbre per una nuova Clojure + ClojureScript profilatura lib dedicato a https://github.com/ptaoussanis/tufte.

Questo è fondamentalmente una raffinatezza del materiale di Timbre, oltre a documenti dedicati.

Il README include una comparison con strumenti JVM come VisualVM, YourKit, ecc

Problemi correlati