2012-11-01 5 views
5

Ich habe eine kopflose Java-Anwendung, die auf einem Remote-Server als Daemon-Prozess ausgeführt wird.Wie profiliere ich eine kopflose Java-Anwendung, die remote ausgeführt wird?

Ich möchte Java-Ebene Profilinformationen aus dem Prozess der von JVisualVM angezeigten Art extrahieren. Zum Beispiel sollte es Methodenaufrufzeiten anzeigen und so weiter.

Was ist der beste Weg, dies zu tun? Mein Verständnis ist, dass JVisualVM bei einer Remote-Verbindung kein Profil erstellt.

Idealerweise werden die Profilinformationen in einer Datei zur späteren Überprüfung gespeichert, ähnlich wie bei der Java-Heapgenerierung (mit Jmap) und später bei der Analyse (mit einem Heap-Inspektor).

+2

Sie diese mit kommerziellen Profilometer tun kann, aber ich weiß nicht, wie es mit VisualVM zu tun. –

+1

Wenn das die allgemeinste, aktuelle Wahrheit ist, könnte es sich lohnen, das zu einer Antwort zu befördern. –

+1

Wenn niemand sonst einen Weg kennt, werde ich. Vielleicht Java-Sicherheitsmodell, mit dem Sie Code auf der gleichen Maschine injizieren können, aber nicht von einem anderen? –

Antwort

1

Sie können NetBeans profiler Fernprofilierungsfähigkeit verwenden.

Fern Profilieren

ein Anwendungsprofil, das auf einem anderen System als Ihre NetBeans IDE ausgeführt wird. Das Remote Pack des Profilers kann auf einem Remote-System installiert werden, sodass Sie eine Anwendung profilieren können, die auf diesem System gestartet wird.

In der Tat, VisualVM is based on it.

Neben diversen Überwachungsfunktionen enthält das Werkzeug einen Einbau-Profiler auf der Basis der NetBeans Profiler. Während die Profiler-Benutzeroberfläche in VisualVM einfach aussieht (insbesondere im Vergleich zum NetBeans-Profiler), sind die Profiling-Funktionen fast genauso leistungsstark wie in NetBeans.

Hier ist ein detaillierter Blogpost über Profiling a Java remote server using Netbeans.

+0

Dies beantwortet die Frage. Ich denke, dass ich anfänglich nach etwas Ausschau hielt, das Aufnahmen machen würde und sich nicht wirklich mit dem Prozess verbinden wollte, aber das war nicht explizit. Aber das beantwortet die gestellte Frage ja, habe also einige Punkte;) –