2011-08-31 9 views
1

VisualVM을 사용하여 Java 응용 프로그램을 검사하려고합니다. 일반적으로 아무런 문제가 없지만 Eclipselink 직조를 설정하려고합니다. 그래서 -javaagent 플래그를 사용하여 프로그램을 시작합니다.VisualVM을 사용하여 -javaagent로 시작된 Java 응용 프로그램 검사

-Xms1024m -Xmx1582m -Xshare:off -javaagent:C:\Users\Administrator\.m2\repository\org\eclipse\persistence\eclipselink\2.3.0-M7\eclipselink-2.3.0-M7.jar 

Viusal VM을 사용하여 프로그램을 볼 때 나는 모니터 페이지에서 아무 것도 볼 수 없습니다.

불행히도 VisualVM 문서 사이트 (visualvm.java.net)가 다운 된 것 같습니다.

내가 뭘 잘못하고 있는지 이해할 수있는 사람 덕분에.

+0

아마 일식 링크 코드 계측은 VisualVM과 잘 작동합니까 ?? –

+0

-javaagent 플래그에 연결되어 있습니까? 다른 Java 응용 프로그램의 모니터링이 제대로 작동합니까? –

+0

Tomas, 예. -javaagent를 사용하여 앱을 시작하기 전까지 작동합니다. Peter가 말했듯이 eclipselink가 클래스의 바이트 코드를 바꾸는 'weaving'이기 때문에 이것이 의심 스럽습니다. 그리고 이것은 visualvm에서는 작동하지 않습니다. – JFK

답변

1

오라클의 Tomas Hurka 덕분에이 질문에 대답 할 수 있습니다.

이 문제는 jvm이 감지 된 시점과 jvmstat (http://java.sun.com/performance/jvmstat/)에 의해 초기화 된 시점 사이의 시간 초과로 인해 발생합니다. 이 간격을 켠 상태에서 분명히 증가했습니다.

이 문제를 해결하는 방법은 두 가지가 있습니다.

1) 당신이 명시 적으로 파일 -을 통해 응용 프로그램> 추가 JMX 연결 에 연결

-Dcom.sun.management.jmxremote.port=<portNum> 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 

로 및 VisualVM과에서 미리 정의 된 포트에 대한 모니터링 응용 프로그램에서 JMX를 활성화하고 "로컬 호스트를"사용할 수있는 연결 문자열로 .

2) 시간 제한을 설정할 수 있습니다.

a) visualvm/etc 디렉토리 (예 : visualvm_132 \ etc)에서 visualvm.conf의 defaults_opts 설정을 편집하여 필요에 따라 -J-Dsun.jvmstat.perdata.syncWaitMs = 10000이 증가되도록합니다 (* 10 ~ 100 초)

VisualVM에는 또한 도움말 -> 정보 -> 로그 파일을 통해 사용할 수있는 로그 파일이 있습니다.이 로그 파일에는 발생한 모든 예외가 표시됩니다. 여기에 타임 아웃 스택 추적을 발견했습니다 ...

INFO [com.sun.tools.visualvm.jvmstat.JvmstatModelProvider]: Could not get MonitoredVM 
sun.jvmstat.monitor.MonitorException: Could not synchronize with target 
    at sun.jvmstat.perfdata.monitor.v2_0.PerfDataBuffer.synchWithTarget(PerfDataBuffer.java:262) 

Tomas에게 다시 한 번 감사드립니다. 그는 이것에서 어떤 포인트를 가져야한다

관련 문제