2010-12-13 10 views
20

Pakiet JDK 1.6 jest dostarczany z poręcznym narzędziem o nazwie VisualVM, które umożliwia inspekcję procesów Java i interakcję z nimi. Jedną z funkcji jest automatyczne wykrywanie uruchomionych maszyn JVM na komputerze lokalnym. Większość z nich jest oznaczona jako "(pid xxxx)", ale niektóre mają nazwę i ikonę, np. VisualVM i inne, takie jak NetBeans (patrz zrzut ekranu na przykład w this dzone article).Jak podać nazwę VisualVM "<Nieznana aplikacja>"?

Jak wprowadzić nazwę aplikacji i ikony do maszyny JVM, aby była poprawnie wyświetlana na liście aplikacji VisualVM? Czy moja aplikacja musi obsługiwać środowisko JRE 1.6, czy też mogę to zrobić w wersji 1.5?

+0

Oto podpowiedź, której nauczyłem się, patrząc na LocalVmManager w OpenJDK: lista lokalnych maszyn wirtualnych jest odkrywana przez wyszukiwanie w $ TMP/hsperfdata_ $ USER /. Każdy plik tam jest nazwany dla PID VM. Zawarty w nim wiersz polecenia to "sun.rt.javaCommand", ale plik procesu VisualVM nie zawiera ciągu "VisualVM", więc nie może pochodzić bezpośrednio z tego pliku. –

Odpowiedz

26

Rozwiązałem połowę mojego pytania za pomocą odpowiedzi NetBeans forum post. Dodanie argumentu wiersza polecenia JVM o wartości -Dvisualvm.display.name=FooBar powoduje, że VisualVM wyświetla aplikację jako "FooBar". Ale wciąż nie mogę zrozumieć, jak wpłynąć na ikonę.

AKTUALIZACJA: Niestety, myślę, że znalazłem odpowiedź na ikonę. Ikony są zakodowane na stałe w VisualVM przez MainClassApplicationTypeFactory w źródle VisualVM, wywoływane z metody statycznej ApplicationTypeFactory.getApplicationTypeFor (Application). Nie widzę żadnego sposobu na wprowadzenie nowej ikony do VisualVM, z wyjątkiem użycia wtyczki VisualVM, która mogłaby zarejestrować fabrykę nowego typu - wtyczka Glassfish robi to za pomocą np. GlassFishApplicationTypeFactory.initialize().

+0

Dzięki, Chris. Właśnie się zastanawiałem, w piątek. Koniec z odgadywaniem gry! –

+1

Więcej porad dla przyszłych czytelników: wydaje mi się, że nie możesz mieć spacji w nazwie aplikacji. Oznacza to, że -Dvisualvm.display.name = Foo Bar i -Dvisualvm.display.name = "Foo Bar" nie działają. –

+0

trochę szkoda, że ​​trzeba napisać wtyczkę i zarejestrować się tylko, aby mieć przyzwoitą graficzną reprezentację aplikacji, którą chcesz śledzić. Może plik manifestu, który jest automatycznie wykrywany przez VisualVM, będzie ładny ... lub po prostu użyj ikony aplikacji ... w jakiś sposób – Alex