Visual GC в Java VisualVM через jstadt для удаленного Tomcat
Я пытаюсь получить макет памяти удаленного Tomcat, визуализированный с помощью Visual GC в Java VisualVM. На сервере Linux, на котором размещается Tomcat, работает jstatd (включая tools.policy и соответствующий [-J]-Djava.rmi.server.hostname=[SERVER_IP], который также можно найти в параметрах jvm Tomcat.).
Соединение VisualVM с сервером /jstatd работает правильно:
Но все, что я вижу на вкладке Visual GC соединения Jstatd, это детали памяти самой JVM Jstatd, а не данные Tomcat.
Редактировать: И на вкладке Visual GC соединения Tomcat (prod apl01 jmx) мне говорят: "Не поддерживается для этой JVM". Тестируя это с системой, которую мы запускаем внутри, я получаю правильные данные здесь.
Удаленный Tomcat запускается с собственным пользователем "tomcat". Должен ли этот пользователь также запускать jstatd? Или есть еще одна проблема, которую я мог бы пропустить?
Любая рабочая альтернатива, такая как другой визуальный инструмент, который обеспечивает визуализацию, подобную приведенной ниже, будет абсолютно приемлемой. Мы также используем Yourkit, но я не смог найти там ничего похожего на простой для понимания стиль Visual GC.
2 ответа
Проведя еще несколько исследований и тестов в нашей среде разработки локалей, я понял, что у нас не было необходимых разрешений для производственной среды. Поэтому я попросил администратора добавить jstatd в список sudoers и вуаля, он работает как положено:
sudo /usr/java/latest/bin/jstatd -J-Djava.security.policy=/home/empulse/tools.policy -J-Djava.rmi.server.hostname=[SERVER_IP]
На удаленном сервере создайте политику,
vim /tmp/tools.policy
Добавить разрешение,
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
И запусти jstatsd,
jstatd -J-Djava.security.policy=/tmp/tools.policy -J-Djava.rmi.server.hostname=<public_ip>
и вы готовы с Visual GC внутри VisualVM на локальной машине.