7 ответов:
соответствующую документацию можно найти здесь:
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
запустить программу со следующими параметрами:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=falseнапример так:
java -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=9010 \ -Dcom.sun.management.jmxremote.local.only=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -jar Notepad.jar
-Dcom.sun.management.jmxremote.local.only=false- это не обязательно но без него он не работает на Ubuntu. Ошибка будет что-то вроде это:01 Oct 2008 2:16:22 PM sun.rmi.transport. customer .TCPTransport$AcceptLoop executeAcceptLoop WARNING: RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=37278] throws java.io.IOException: The server sockets created using the LocalRMIServerSocketFactory only accept connections from clients running on the host where the RMI remote objects have been exported. at sun.management.jmxremote.LocalRMIServerSocketFactory.accept(LocalRMIServerSocketFactory.java:89) at sun.rmi.transport. customer .TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387) at sun.rmi.transport. customer .TCPTransport$AcceptLoop.run(TCPTransport.java:359) at java.lang.Thread.run(Thread.java:636)посмотреть http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6754672
также будьте осторожны с
-Dcom.sun.management.jmxremote.authenticate=falseчто делает доступ доступным для всех, но если вы используете его только для отслеживания JVM локальном компьютере, это не имеет значения.обновление:
в некоторых случаях я не смог подключиться к серверу. Затем это было исправлено, если я также установил этот параметр:
-Djava.rmi.server.hostname=127.0.0.1
запуск в контейнере Docker привел к целому ряду дополнительных проблем для подключения, поэтому, надеюсь, это поможет кому-то. В итоге мне пришлось добавить следующие параметры, которые я объясню ниже:
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=${DOCKER_HOST_IP} -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9998DOCKER_HOST_IP
в отличие от использования jconsole локально, вы должны рекламировать другой IP, чем вы, вероятно, увидите из контейнера. Вам нужно будет заменить
${DOCKER_HOST_IP}с внешним разрешимым IP (DNS-именем) вашего Докер хост.JMX Remote & RMI Ports
похоже, что JMX также требует доступа к интерфейсу удаленного управления (jstat), что использует другой порт для передачи некоторых данных при арбитраже соединения. Я не видел ничего сразу очевидного в
jconsoleдля установки этого значения. В связанной статье процесс был:
- попробуйте подключиться из
jconsoleс вырубкой включено- Fail
- выяснить, какой порт
jconsoleпытались использовать- использовать
iptables/firewallправила, необходимые для подключения этого портахотя это работает, это, конечно, не автоматизируемое решение. Я выбрал обновление от jconsole до VisualVM так как это позволяет вам явно указать порт, на котором
jstatdработает. В VisualVM добавьте новый удаленный узел и обновите его со значениями, которые соотносятся с указанными выше:затем щелкните правой кнопкой мыши новое подключение к удаленному хосту и
Add JMX Connection...не забудьте установить флажок
Do not require SSL connection. Надеюсь, это позволит вам подключиться.
Примечание, Java 6 в последнем воплощении позволяет jconsole присоединяться к запущенному процессу даже после того, как он был запущен без заклинаний JMX.
Если это доступно для вас, также рассмотрите jvisualvm, поскольку он предоставляет богатую информацию о запущенных процессах, включая профилировщик.
Я использую WAS ND 7.0
моей JVM нужны все следующие аргументы для мониторинга в JConsole
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8855 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
в Linux я использовал следующие параметры:
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=falseа также я редактировал
/etc/hostsТак что имя хоста в хост-адрес (192.168.0.x) вместо адреса обратной связи (127.0.0.1)
запустите приложение java со следующими параметрами командной строки:
-Dcom.sun.management.jmxremote.port=8855 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=falseважно использовать - Dcom.солнце.управление.jmxremote.ssl=false параметр, если вы не хотите настраивать цифровые сертификаты на хосте jmx.
Если вы запустили приложение на компьютер, имеющий IP-адрес 192.168.0.1, открытого jconsole, поставил 192.168.0.1:8855 на Удаленный Процесс поле, и нажмите кнопку подключиться.
у меня был именно этот вопрос, и создал проект GitHub для тестирования и выяснения правильных настроек.
Она
Dockerfileс поддержкой скриптов, и простойdocker-compose.ymlдля быстрого тестирования.


Comments