Проверка Java-приложения, которое было запущено с -javaagent с использованием VisualVM
Я пытаюсь проверить приложение 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, я ничего не вижу на странице Monitor.
К сожалению, сайт документации VisualVM (на visualvm.java.net), кажется, не работает.
Спасибо всем, кто может помочь мне понять, что я делаю неправильно.
1 ответ
Благодаря Томасу Хурке из 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)
Еще раз спасибо Томасу. Он должен получить какие-либо очки от этого