Проверка Java-приложения, которое было запущено с -javaagent с использованием VisualVM - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь проверить приложение Java с помощью VisualVM.Обычно проблем нет, но я пытаюсь настроить переплетение Eclipselink, и поэтому я запускаю программу, используя флаг -javaagent;

-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), кажется, не работает.

Спасибо всем, кто может помочь мне понять, что я делаю неправильно.

1 Ответ

1 голос
/ 01 сентября 2011

Благодаря Томасу Хурке из Oracle я могу ответить на этот вопрос.

Проблема вызвана тайм-аутом между обнаружением jvm и его инициализацией jvmstat (http://java.sun.com/performance/jvmstat/). При включенном ткачестве этот интервал явно увеличивается.

Есть 2 способа это исправить.

1) вы можете явно включить JMX в отслеживаемом приложении на предопределенном порту с помощью

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

и из VisualVM присоедините к вашему приложению через File-> Add JMX connection и используйте "localhost:" в качестве строки подключения.

2) Вы можете увеличить время ожидания;

a) В каталоге visualvm / etc (например, visualvm_132 \ etc) отредактируйте параметр defaults_opts в visualvm.conf так, чтобы -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)

Еще раз спасибо Томасу. Он должен получить любые очки от этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...