2011-10-22 15 views
8

Sto tentando di monitorare/profilare selettivamente un'applicazione Java quando vengono soddisfatte determinate condizioni di runtime. Sono già in grado di scaricare l'heap al volo usando lo HotSpotDiagnosticMXBean, che è stato abbastanza utile.Avvio del profiler Java HPROF al volo

Attualmente sto cercando di fare qualcosa di simile con il profilo della CPU, sperando di indirizzare in modo più efficace percorsi di codice specifici. Ho una certa esperienza con la riga di comando HPROF interface e il profiler NetBeans, ma entrambi devono essere avviati in anticipo.

C'è un modo per attivare il profiler HPROF in modo programmatico da un'applicazione in esecuzione? Preferibilmente qualcosa che mi permetterebbe di avviare e fermare il processo di profilazione a piacimento?

risposta

1

In base allo JVMTI documentation, le librerie di agent nativi come hprof devono essere caricate molto presto durante l'inizializzazione JVM, prima che venga eseguito qualsiasi bytecode. Quindi no, non è possibile farlo al volo.

Un'alternativa potrebbe essere quella di rilanciare il processo java con parametri JVM modificati all'interno della funzione principale, sebbene ciò non sia banale.

+0

Purtroppo, questa sembra essere la risposta giusta, almeno per quanto riguarda HPROF ... +1 – thkala

+0

Non sono convinto che questa sia una buona risposta. Dipende più precisamente da cosa si sta occupando la domanda originale. La documentazione citata dice che l'agente di definizione dei profili deve iniziare prima che JVM esegua qualsiasi codice ... non dice _ che la profilazione deve iniziare prima che il codice inizi l'esecuzione. Il profiler può iniziare e il _profiling_ può iniziare in seguito. Un modo programmatico per controllare quando inizia la profilatura sarebbe molto utile. Puoi dire che _profiling_ deve iniziare prima dell'esecuzione di qualsiasi codice? E citare un riferimento? – Jason