2010-12-13 10 views
20

JDK 1.6 wird mit einem praktischen Tool namens VisualVM geliefert, mit dem Sie laufende Java-Prozesse überprüfen und mit ihnen interagieren können. Eine Funktion ist, dass laufende JVMs auf dem lokalen Computer automatisch erkannt werden. Die meisten sind als "(pid xxxx)" aufgeführt, aber einige haben einen Namen und ein Symbol, wie VisualVM selbst und andere wie NetBeans (siehe Screenshot in this dzone article zum Beispiel).Wie gebe ich einem VisualVM "<Unbekannte Anwendung>" einen Namen?

Wie injiziere ich meinen Anwendungsnamen und mein Symbol in die JVM, damit es in VisualVMs Anwendungsliste richtig angezeigt wird? Muss meine App JRE 1.6 ausführen oder kann ich dies auch unter 1.5 tun?

+0

Hier ist ein Hinweis, den ich gelernt habe, indem ich LocalVmManager in OpenJDK angeschaut habe: Die Liste der lokalen VMs wurde durch das Suchen in $ TMP/hsperfdata_ $ USER/ermittelt. Jede Datei darin wird nach der PID der VM benannt. Darin enthalten ist die Befehlszeile als "sun.rt.javaCommand", aber die Datei für den VisualVM-Prozess enthält nicht die Zeichenfolge "VisualVM", so dass sie nicht direkt aus dieser Datei kommen kann. –

Antwort

26

Ich löste die Hälfte meiner eigenen Frage über eine NetBeans forum post Antwort. Das Hinzufügen einer JVM-Befehlszeilenarg von -Dvisualvm.display.name=FooBar lässt VisualVM die App als "FooBar" anzeigen. Aber ich kann immer noch nicht herausfinden, wie ich das Symbol beeinflussen kann.

UPDATE: Ach, ich glaube, ich habe meine Antwort für das Symbol gefunden. Die Symbole sind fest in VisualVM über MainClassApplicationTypeFactory in der VisualVM-Quelle codiert, die von der statischen Methode ApplicationTypeFactory.getApplicationTypeFor (Application) aufgerufen wird. Ich kann keine Möglichkeit sehen, ein neues Symbol in VisualVM einzufügen, außer indem ich ein VisualVM-Plugin mache, das eine neue Typ-Factory registrieren könnte - das Glassfish-Plugin tut dies beispielsweise über GlassFishApplicationTypeFactory.initialize().

+0

Danke, Chris. Ich habe mich gerade am Freitag gefragt. Kein Ratespiel mehr! –

+1

Weitere Hinweise für zukünftige Leser: Es scheint mir, dass Sie keine Leerzeichen im App-Namen haben können. Das heißt, -Dvisualvm.display.name = Foo Bar und -Ddisvalvm.display.name = "Foo Bar" funktionieren nicht. –

+0

irgendwie lahm, um ein Plugin zu schreiben und nur zu registrieren, um eine anständige visuelle Darstellung der App zu haben, die Sie verfolgen möchten. Vielleicht wird ein Manifest wie eine Datei, die von VisualVM automatisch erkannt wird, nett sein ... oder einfach das eigene Icon der App verwenden ... irgendwie – Alex