2010-12-13 2 views
20

JDK 1.6에는 실행중인 Java 프로세스를 검사하고 상호 작용할 수있는 VisualVM이라는 편리한 도구가 번들로 제공됩니다. 한 가지 특징은 로컬 시스템에서 실행중인 JVM을 자동 감지한다는 것입니다. 대부분은 "(pid xxxx)"로 나열되어 있지만 일부는 VisualVM 자체 및 NetBeans와 같은 다른 이름과 아이콘이 있습니다 (예 : this dzone article의 스크린 샷 참조).VisualVM "<알 수없는 응용 프로그램>"에 이름을 지정하려면 어떻게합니까?

내 응용 프로그램 이름과 아이콘을 JVM에 삽입하여 VisualVM의 응용 프로그램 목록에 제대로 표시되도록하려면 어떻게해야합니까? 내 응용 프로그램이 JRE 1.6을 실행해야합니까, 아니면 1.5 이하에서도이 작업을 수행 할 수 있습니까?

+0

OpenJDK의 LocalVmManager를 살펴보면서 알게 된 힌트가 있습니다. 로컬 VM 목록은 $ TMP/hsperfdata_ $ USER /를 보면 알 수 있습니다. 거기에있는 각 파일의 이름은 VM의 PID입니다. 그 안에는 명령 줄 "sun.rt.javaCommand"가 있지만 VisualVM 프로세스의 파일에는 "VisualVM"문자열이 포함되어 있지 않으므로 해당 파일에서 직접 가져올 수 없습니다. –

답변

26

나는 NetBeans forum post 답변을 통해 내 자신의 질문의 절반을 해결했습니다. -Dvisualvm.display.name=FooBar의 JVM 명령 행 인수를 추가하면 VisualVM이 해당 응용 프로그램을 "FooBar"로 표시합니다. 그러나 나는 아직도 아이콘에 어떻게 영향을 미치는지 알 수 없다.

업데이트 : 아아, 나는 아이콘에 대한 나의 답을 찾은 것 같아요. 아이콘은 VisualVM 소스의 MainClassApplicationTypeFactory을 통해 VisualVM에 하드 코딩되며, 정적 메소드 ApplicationTypeFactory.getApplicationTypeFor (Application)에서 호출됩니다. GlassVM 플러그인이 GlassFishApplicationTypeFactory.initialize()를 통해이 작업을 수행하는 등 새로운 유형의 팩토리를 등록 할 수있는 VisualVM 플러그인을 만드는 경우를 제외하면 VisualVM에 새 아이콘을 삽입 할 수있는 방법이 없습니다.

+0

고마워, 크리스. 나는 금요일에 그것을 궁금해했다. 더 이상 짐작할 수없는 게임! –

+1

미래의 독자들에게 더 많은 조언 : 앱 이름에 공백을 넣을 수 없다는 것이 나에게 보인다. 즉, -Dvisualvm.display.name = Foo Bar 및 -Dvisualvm.display.name = "Foo Bar"가 작동하지 않습니다. –

+0

플러그인을 작성하고 추적하여 앱을 알맞게 시각적으로 표현할 수 있어야합니다. 어쩌면 VisualVM에 의해 자동 발견 된 파일과 같은 매니페스트가 좋을 것입니다 ... 아니면 그냥 응용 프로그램의 아이콘을 사용하십시오 ... 어떻게 든 – Alex

관련 문제