2012-04-18 6 views
5

Ho un problema di prestazioni (Hi-CPU) nella mia applicazione server. Ma il problema appare solo quando il server è in esecuzione da molto tempo (una settimana in media). Ho provato ad usare il profiler integrato di Netbeans per diagnosticare il problema, ma dopo aver funzionato per alcune ore semplicemente smette di rispondere.Esiste un profiler Java o un registratore delle prestazioni a lungo termine?

Esiste un modo per eseguire il monitoraggio a lungo termine dell'applicazione? Grazie.

UPDATE: Questo NON è un applicazione web

risposta

4

Si dovrebbe dare un'occhiata a Visual VM Se havent già fatto (se siete su JDK 6 Update 7 o superiore). Sono sicuro che sarà piuttosto confortante dal momento che è un "adattamento" del profiler Netbeans nel core Java.

0

Non so molto sugli strumenti di profilatura, quindi non ho intenzione di raccomandare uno strumento di profilazione.

Invece, quello che vorrei fare è usare AspectJ per inserire le dichiarazioni di registrazione (Log4j) nel mio codice. Se si è a conoscenza di determinate aree che si desidera monitorare, è sufficiente iniettare il log in quei punti specifici. Altrimenti, se vuoi vedere tutto, puoi semplicemente generalizzare le tue scelte e iniettarle ovunque.

Raccogliere i registri per una settimana e quindi cercare ciò che potrebbe comportarsi "in modo irregolare". Questi file di registro sarà probabilmente piuttosto lunga a seconda di ciò che si decide di accedere, quindi potrebbe essere necessario utilizzare alcuni file di analisi per raccogliere informazioni come:

  • # di chiamate di ciascun metodo
  • tempo tra alcune chiamate di metodo
  • sono sicuro che si può pensare agli altri in base a conoscere le specifiche della vostra applicazione

confrontare questi numeri a partire dall'inizio della settimana con quelli in cui le immersioni prestazioni. Se stai ottenendo risultati di prestazioni notevoli, allora immagino che questi saranno ovviamente riflessi in file di registro di questa natura.

Questo può essere un po 'più di lavoro che eseguire uno strumento di profiling fuori dalla scatola, ma è piuttosto flessibile e può essere una buona esperienza di apprendimento se prima non hai fatto molto con AspectJ.

0

Esiste un'offerta commerciale che è possibile considerare DynaTrace da Compuware. Non lavoro per, e non ho mai lavorato per o con Compuware, tuttavia la mia attuale organizzazione sta considerando di utilizzare Dynatrace nel nostro ambiente di produzione.

A seconda del tipo di applicazione Java in esecuzione, che si tratti di un'installazione basata su desktop o basata su server, l'aggiunta di un jar al percorso classe (oltre all'aggiunta di un'appliance di rete alla rete). L'esecuzione dell'applicazione determinerebbe l'invio dei dati della strumentazione ai server Dynatrace, dove è possibile recuperarli e persino tracciare i singoli percorsi e transazioni dell'utente attraverso l'intero sistema (indipendentemente dalla tecnologia utilizzata).

Dynatrace è qualcosa che immagino di aver lasciato in esecuzione in qualsiasi momento, piuttosto che solo quando si voleva diagnosticare un particolare problema.Inoltre, Dynatrace non è economico: probabilmente stai considerando un costo a 5 cifre per server, tuttavia da quello che ho visto sembra funzionare quasi come un debugger permanente, ma senza troppa penalizzazione delle prestazioni (<) 5%).

Non so esattamente quale tipo di applicazione stai utilizzando, ma la nostra è un'applicazione web basata su Java EE, che si interfaccia con alcuni dei nostri server di back-end.

HTH

1

ho scritto uno strumento logger prestazioni che campiona metriche quali CPU, memoria e le discussioni contare e tronchi li usano log4j. Confrontando i registri delle prestazioni con i registri delle applicazioni, è possibile rilevare facilmente i modelli di prestazioni e profilare la propria applicazione. Godere!

Performance-Logger