2012-10-29 18 views
9

Mam aplikację Wicket + Spring + Hibernate działającą na Jetty. Kiedy zacznę CPU profilowania go VisualVM (JDK 1.7.0_9) IT pierwsze stragany na kilka minut z nadrukami konsoli:Profilowanie pomostu z visualvm jest super powolne

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

Te linie są powtarzane około 20 razy, a następnie VisualVM mówi, że zaczęła instumentation i oprzyrządowanie około 8000 metody.

Teraz po tym kliknięciu przycisku na mojej aplikacji sieci web i ponownie aplikacja całkowicie zawiesza się na kilka minut, podczas gdy konsola drukuje linie jak:

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

Po tym mam profilowania wyniki, ale są one dość bezużyteczny jako prawie 99,6% czasu spędza

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

To sprawia, że ​​VisualVM całkowicie nie nadaje się do użycia. Jakieś domysły, co może być winowajcą?

biegnę Jetty 8.1.2.v20120308

Odpowiedz

11

Proponuję najpierw zacząć od pobrania próbek procesora. Gdy już wiesz, co jest nie tak, możesz przejść do profilowania, aby uzyskać szczegółowe informacje. Koniecznie przeczytaj Profiling With VisualVM, Part 1 i Profiling With VisualVM, Part 2, aby uzyskać więcej informacji na temat konfigurowania profilowania serwera Jetty.

6

Odpowiedź jest zawężenie zakresu tego, co zajęcia są oprzyrządowanie.

Kliknij opcję Ustawienia w profilera i spojrzeć na „Do klasy nie profilu” lub „profil tylko klasy”. Pamiętaj, aby wykluczyć biblioteki stron trzecich, których nie chcesz sprawdzać. Na przykład używałem Jython w mojej aplikacji i profiler próbował przyswoić tysiące klas, prawdopodobnie włączając klasy generowane dynamicznie w czasie wykonywania (niedobrze).