2012-10-29 9 views
9

Ho un'applicazione wicket + spring + hibernate in esecuzione su Jetty. Quando inizio CPU profiling con VisualVM (JDK 1.7.0_9) è arrivato prima di stalle per diversi minuti con stampe di console:Il jetty di profilo con visualvm è super slow

Profiler Agent: 250 classes cached. 
Profiler Agent: 250 classes cached. 

Queste linee sono ripetute circa 20 volte, poi VisualVM dice che ha iniziato Instumentation e strumentato circa 8000 metodi.

Ora dopo questo fa clic su un pulsante sul mio applicazione Web e di nuovo l'applicazione si blocca completamente per alcuni minuti, mentre console stampe su linee come:

Profiler Agent: Redefining 100 classes at idx 100, out of total 336 

Dopo questo ho profilazione risultati ma sono abbastanza inutile come quasi il 99,6% del tempo viene impiegato da

sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run() 

Ciò rende VisualVM totalmente inutilizzabile. Qualcuno indovina quale potrebbe essere il colpevole qui?

Io corro Jetty 8.1.2.v20120308

risposta

11

vorrei suggerire di iniziare con il campionamento della CPU prima. Una volta che hai un'idea di ciò che è sbagliato, puoi passare alla profilazione per ottenere informazioni dettagliate. Assicurati di leggere Profiling With VisualVM, Part 1 e Profiling With VisualVM, Part 2 per ottenere ulteriori informazioni su come impostare il profilo del tuo server Jetty.

6

La risposta è restringere l'ambito di ciò che le classi vengono strumentate.

Fare clic sull'opzione impostazioni nel profiler e vedere "Classi profilo non" o "Classi solo profilo". Assicurati di escludere librerie di terze parti che non vuoi esaminare. Ad esempio, stavo usando Jython nella mia app e il profiler stava cercando di utilizzare migliaia di classi, probabilmente includendo classi generate dinamicamente in fase di runtime (non buone).