2012-10-29 14 views
9

Ich habe eine Wicket + Spring + Winterschlaf Anwendung auf Jetty. Wenn ich CPU Profilierungs es mit VisualVM (jdk 1.7.0_9) es ersten Stände für einige Minuten mit Konsole Prints auszudrucken:Profiling Anlegestelle mit Visualvm ist super langsam

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

Diese Linien werden wiederholt um das 20-fache, dann sagt VisualVM es Instrumentierung und instrumentiert rund 8000 begonnen hat Methoden.

Nun danach klicken ich eine Taste auf meiner Web-Anwendung und erneut die Anwendung hängt vollständig für wenige Minuten, während Konsole druckt Zeilen wie:

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

Danach erhalte ich Ergebnisse Profilierungs aber sie sind ziemlich nutzlos, da fast 99,6% der Zeit werden ausgegeben von

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

Dies macht VisualVM völlig unbrauchbar. Irgendwelche Vermutungen, was könnte der Schuldige hier sein?

Ich bin mit Jetty 8.1.2.v20120308

Antwort

11

Ich würde vorschlagen, zunächst mit CPU Sampling zu starten. Sobald Sie eine Idee haben, was falsch ist, können Sie zu Profiling wechseln, um detaillierte Informationen zu erhalten. Lesen Sie unbedingt Profiling With VisualVM, Part 1 und Profiling With VisualVM, Part 2, um weitere Informationen zum Einrichten der Profilerstellung Ihres Jetty-Servers zu erhalten.

6

Die Antwort ist, den Umfang der Klassen zu beschränken, die instrumentiert werden.

Klicken Sie im Profiler auf die Einstellungsoption und sehen Sie unter "Klassen nicht profilieren" oder "nur Klassen profilieren". Achten Sie darauf, Bibliotheken von Drittanbietern auszuschließen, die Sie nicht untersuchen möchten. Zum Beispiel habe ich Jython in meiner App verwendet und der Profiler hat versucht, Tausende von Klassen zu instrumentieren, wahrscheinlich auch dynamisch zur Laufzeit erzeugte Klassen (nicht gut).

Verwandte Themen