2013-07-22 18 views
21

Ho una piccola applicazione Akka che passa molti messaggi tra i suoi attori e ogni attore fa alcuni calcoli sui dati che riceve. Quello che voglio è profilare questa applicazione per vedere quali parti del codice occupano la maggior parte del tempo e così via.Come profilo le applicazioni Akka?

Ho provato VisualVM ma non riesco davvero a capire cosa sta succedendo. Ho aggiunto una foto dell'output del profiler.

Le mie domande sono

  • Quello che per esempio è questo prima linea e perché ci vuole così tanto tempo? (scala.concurrent.forkjoin.ForkJoinPool.scan())
  • Le applicazioni Akka a causa del loro comportamento asincrono possono essere profilate correttamente?
  • Posso vedere ad esempio per quanto tempo uno specifico attore (tipo) funziona per uno specifico messaggio (tipo) che riceve?
  • Esistono altre best practice per la profilatura delle applicazioni Akka?

Profiler

risposta

13
  • Ci sono pacchetti non profilati di default ed è il loro tempo che è rappresentato nel profilo di scala.concurrent.forkjoin.ForkJoinPool.scan(). Se tutti i pacchetti nascosti possono essere campionati, i veri consumatori di tempo CPU saranno rivelati. Ad esempio, i seguenti profili prima/dopo illustrativi scoprono che i thread vengono messi a dormire la maggior parte del tempo da sun.misc.Unsafe.park in attesa di essere non parcheggiati. beforeafter
  • Le applicazioni Akka possono essere profilate abbastanza bene con la strumentazione corretta e il tracciamento delle chiamate. Il documento prominente di Google Dapper, a Large-Scale Distributed Systems Tracing Infrastructure contiene una spiegazione dettagliata della tecnica. Twitter ha creato Zipkin basato su quello. È open source e ha un extension for distributed tracing of Akka. Seguire la sua wiki per una buona spiegazione di come impostare un sistema che permette di

    • gerarchie chiamata traccia all'interno di un sistema di attore;
    • pipeline di elaborazione richieste di debug (è possibile accedere alle tracce, annotarle con coppie chiave-valore personalizzate);
    • vedere le dipendenze tra le richieste derivate e il loro contributo al tempo di risposta risultante;
    • Trova e analizza le richieste più lente nel tuo sistema.

    C'è anche un nuovo capretto sul blocco, Kamon. Si tratta di un kit di strumenti reattivo per il monitoraggio delle applicazioni che girano sulla JVM, che è particolarmente entusiasta delle applicazioni create con la piattaforma Typesafe Reactive. Ciò significa sicuramente sì per Akka e l'integrazione si presenta sotto forma dei moduli kamon-akka e kamon-akka-remote che portano la strumentazione bytecode per raccogliere le metriche ed eseguire la propagazione del contesto di traccia automatica per conto dell'utente.Esplora la documentazione a partire da Akka Integration Overview per capire cosa può e come ottenerlo.

7

Solo un paio di giorni fa typesafe announced che TypeSafe console ora è libero. Non so cosa possa essere migliore per profilare le applicazioni Scala/Akka. Perchè puoi provare JProfiler per i linguaggi JVM, l'ho usato con i progetti Java, ma non è gratuito e per Java.

+4

Sfortunatamente il progetto della console Typesafe si è interrotto: https://groups.google.com/forum/#!forum/typesafe-console – Sonson123

5

Stavo pensando di profilazione/metriche in codice dato che io uso anche Akka/Scala un sacco per la creazione di applicazioni di produzione, ma anche ansiosi di sentire modi alternativi per assicurarsi che l'applicazione è sano.

  1. Metrics (like Dropwizard)

Ottimo strumento per la raccolta delle metriche nel codice, con una buona documentation e incorporato il supporto per Graphite, Ganglia, Logback, ecc

Ha strumenti dettagliati per la raccolta in- statistiche dell'app come indicatori, counter istogrammi, tempi - informazioni per capire qual è lo stato attuale della tua app, quanti attori sono stati creati, ecc., se sono vivi, qual è lo stato attuale della maggior parte degli attori, ecc.

D'accordo, è un po 'diverso dal profiling ma aiuta molto a trovare le radici del problema, specialmente se integrato con qualche strumento di costruzione di char.

  1. Profilers like (VisualVM, XRebel)

Dato che io sono un grande divertimento di fare monitoraggio, risponde ancora una domanda leggermente diversa - quali sono intuizioni attuali della mia domanda in questo momento? Ma c'è un'altra questione che potrebbe disturbarci - quale del mio codice è lento (o sciatto)?

Per questo motivo, VisualVM e altre risposte a questa domanda - come profilo degli attori Akka con VisualVM.

Inoltre, suggerirei di provare il profiler XRebel che aggiunge un po 'più potenza di fuoco al processo per capire quale codice rende l'app più lento. È anche pagato ma sul mio progetto ha risparmiato un sacco di tempo a gestire il codice sciatto.

  1. New Relic

io suggerirei per alcuni progetti parco giochi dato che è possibile ottenere un certo controllo/profilatura soluzioni gratuitamente, ma su progetti più seri andrei per le cose che ho evidenziato sopra.

Quindi spero che la mia panoramica sia stata utile.

Problemi correlati