WedX - журнал о программировании и компьютерных науках

Несколько приложений Java с использованием JMX

Я очень новичок в JMX, и я пытаюсь добиться следующего: я хочу использовать JMX для мониторинга нескольких экземпляров одного и того же Java-приложения. Проблема в том, что это приложение может запускаться несколько раз одновременно. Мне нужна возможность отслеживать значения JMX с другого (удаленного) хоста.

Пример Java-приложения:

public class Test {
  public static void main(String[] args) {
    while(true) {
      try {
        Thread.sleep(1000);
        System.out.println("I'm running");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

Скомпилировано с использованием javac Test.java, а затем выполнено с использованием

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.local.only=false \
-Djava.net.preferIPv4Stack=true \
Test

Теперь приложение работает, но я не знаю, как подключиться к этому процессу из jconsole: я могу использовать netstat, чтобы узнать порт, на котором прослушивается JVM, но я не могу подключиться, потому что я получаю исключение «нет такого объекта в таблице», когда подключение.

Если я запускаю его с помощью

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.local.only=false \
-Djava.net.preferIPv4Stack=true \
-Dcom.sun.management.jmxremote.port=1412 \
Test

, я могу подключиться к 1.2.3.4:1412 с помощью jconsole. Но: я не могу запустить это приложение во второй раз без изменения порта, что вполне логично, поскольку приложение не может привязаться к порту во второй раз.

Как запустить одно и то же приложение несколько раз (с одной и той же командной строкой!), а затем подключиться к нескольким экземплярам?

23.07.2013

  • Я думаю, вам нужно иметь другой процесс перед JMX, чтобы получить порты, без этого я не думаю, что это возможно. 23.07.2013
  • Относится к: stackoverflow.com/questions/7112052/jmx-port-dynamic -распределение 23.07.2013
  • Я уже читал этот вопрос, но я не знаю, что мне нужно сделать, чтобы он заработал... 23.07.2013

Ответы:


1

См. мой ответ на другой вопрос: Включить JMX в задании Hadoop

Вы можете установить порт = 0, а затем включить ведение журнала, чтобы вы могли видеть порт, который был выбран, как указано здесь: https://forums.oracle.com/message/4798165#4798165

25.10.2013
  • Если JDK-8172384 исправлено, вы сможете чтобы увидеть порт без изменения конфигурации ведения журнала. 09.01.2017

  • 2

    Я могу подключиться к 1.2.3.4:1412 с помощью jconsole. Но: я не могу запустить это приложение во второй раз без изменения порта, что вполне логично, так как приложение не может привязаться к порту во второй раз.

    Каждая из ваших JVM должна будет жить на другом порту.

    Как запустить одно и то же приложение несколько раз (с одной и той же командной строкой!), а затем подключиться к нескольким экземплярам?

    Запустив их на другом порту:

    java -Dcom... -Dcom.sun.management.jmxremote.port=1412 Test
    java -Dcom... -Dcom.sun.management.jmxremote.port=1413 Test
    

    Вы также можете использовать port=0, чтобы получить «динамический» порт RMI, но я не уверен, как вы это увидите удаленно.

    Вы можете использовать мой пакет SimpleJMX, который делает публикацию компонентов JMX очень простой. Это также позволяет вам легко и программно публиковать JMX для разных портов.

    23.07.2013
  • Спасибо за ваш ответ, но это потребует, чтобы я не мог дважды запустить одну и ту же команду, используя одну и ту же командную строку. Я надеялся, что есть вероятность, что JVM получит случайный порт, и я смогу подключиться к этому порту позже. 23.07.2013
  • Это не то, как работает JMX @theomega. Вам необходимо определить конечную точку, если вы хотите подключиться к ней через удаленный TCP-порт. Этот порт TCP должен быть уникальным. Вам также нужен порт для jconsole, чтобы иметь возможность подключиться к нему. Это не может быть случайным. 23.07.2013
  • А РМИ? Можно ли это как-то использовать по этой причине? А как насчет установки порта на 0. Кажется, он каким-то образом рандомизирует порт, и я могу подключиться к нему, возможно, это решение? 23.07.2013
  • Я не знал о поддержке port=0. Однако я не понимаю, как это будет работать удаленно, поскольку вам все еще нужно найти порт, чтобы иметь возможность подключиться к нему @theomega. 23.07.2013
  • Да, это проблема с настройкой port=0. 23.07.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]