JMX определен [закрыт]

Я ищу:

  • Что такое JMX.
  • Где я могу найти несколько хороших руководств по JMX.
  • Что JMX может дать мне как программисту Java EE.
  • Что-нибудь еще, о чем я должен знать.

person mainstringargs    schedule 13.05.2009    source источник


Ответы (6)


JMX — это способ просмотра и управления состоянием выполнения вашего приложения. По своей концепции он чем-то похож на SNMP, если это поможет. ИМО, это необходимо для мониторинга и понимания приложений серверного типа, которые могут не иметь никакого другого пользовательского интерфейса, кроме записи в файл журнала.

Основной подход состоит в том, чтобы создать интерфейс для вещей, которые вы хотите отслеживать, затем реализовать интерфейс в классе, а затем зарегистрировать экземпляр этого класса с помощью «MBeanServer» (что фактически делает материал, определенный в интерфейсе, доступным для мониторинга JMX). приложения, такие как jconsole).

Вот тривиальный, но работающий пример:

(Я предполагаю Java 5 или лучше)

TestServerMBean.java

public interface TestServerMBean
{
    public long getUptimeMillis();
    public long getFooCount();
    public void setFooCount(long val);
    public void printStuff(String stuff);
}

TestServer.java:

import java.lang.management.ManagementFactory;
import java.util.concurrent.atomic.AtomicLong;

import javax.management.ObjectName;

// If jconsole doesn't see this app automatically, invoke the application with the following java flags, and connect
// 'remotely' via jconsole.
//
// -Dcom.sun.management.jmxremote
// -Dcom.sun.management.jmxremote.port=2222 (or whatever)
// -Dcom.sun.management.jmxremote.authenticate=false
// -Dcom.sun.management.jmxremote.ssl=false
public class TestServer implements TestServerMBean
{
    private final AtomicLong m_counter = new AtomicLong(0L);
    private final long m_startTimeMillis = System.currentTimeMillis();

    public void run() throws InterruptedException {
        while (true) {
            m_counter.incrementAndGet();
            Thread.sleep(5000);
        }
    }

    public long getFooCount() {
        return m_counter.get();
    }

    public void setFooCount(long val) {
        m_counter.set(val);
    }

    public long getUptimeMillis() {
        return System.currentTimeMillis() - m_startTimeMillis;
    }

    public void printStuff(String stuff) {
        System.out.println(stuff);
    }

    public static void main(String[] args) throws Exception {
        TestServer ts = new TestServer();
        ManagementFactory.getPlatformMBeanServer().registerMBean(ts, new ObjectName("myapp:service=MyServer"));
        ts.run();
    }
}

Скомпилируйте и запустите TestServer.class как обычно, запустите jconsole, подключитесь к TestServer (он появится автоматически, в противном случае смотрите комментарии в коде выше), затем посмотрите на вкладку «MBeans», и вы увидите наш экземпляр с именем myapp:service=MyServer . Вы можете просмотреть текущее «время безотказной работы» и наблюдать за увеличением FooCounter каждые 5 секунд. Вы также можете установить для FooCounter любое (длинное) значение, которое вы хотите, и вызвать метод printStuff с любым строковым аргументом.

Очевидно, что это нелепый «сервер», но, надеюсь, простой рабочий пример поможет проиллюстрировать общую концепцию: возможность заглянуть в работающее приложение и манипулировать им.

Есть много дополнительных функций и различных типов MBeans, но только показанный выше ванильный JMX имеет большое значение, IMO.

person overthink    schedule 13.05.2009
comment
хороший пример да, но он ничего не делает видимым в JConsole - person apostrophedottilde; 21.10.2016

Короче говоря, JMX позволяет вам удаленно вызывать методы или просматривать открытые данные изнутри работающей JVM. Многие приложения используют JMX для подключения удаленной панели управления к работающим JVM для обеспечения удаленного управления.

Например, если у вас есть сервер приложений, работающий на машине, с помощью JMX можно будет удаленно просматривать открытую информацию об этом сервере. Также можно закодировать свои собственные JMX MBeans, которые могут отображать любые переменные или методы внутри вашего приложения. Затем открытые переменные могут быть «опрошены» удаленно для проверки определенных условий, о которых вы хотели бы знать.

Еще одна полезная особенность JMX заключается в том, что вы можете удаленно изменять переменные на лету. Например, если у вас настроен какой-либо пул с максимальной общей суммой, эту максимальную сумму можно изменить удаленно без необходимости перезапуска или изменения каких-либо файлов конфигурации на вашем сервере приложений.

jconsole предоставляется Sun вместе с Java, чтобы можно было легко просматривать ваши MBeans удаленно без необходимости кодировать собственное клиентское решение. Вы также можете использовать MBeans с помощью специального решения, которое может дать вам превосходную гибкость.

Кроме того, уже есть некоторое программное обеспечение для мониторинга, которое поставляется со встроенным мониторингом JMX MBean. Zenoss и Applications Manager 8 делают это, если назвать пару.

Дополнение:

Уже существует много программного обеспечения, использующего преимущества JMX. Tomcat предоставляет информацию, доступную через jconsole, как и JBoss Application Server.

person Peter D    schedule 13.05.2009

Возможно, здесь стоит упомянуть и JSR 262.

«JSR 262 определяет коннектор для удаленного API JMX, который использует веб-службы для обеспечения удаленного доступа к инструментарию JMX. Клиенты не обязательно должны быть приложениями Java, но могут ими быть».

Весьма вероятно, что JSR 262 станет частью следующей версии Java (Java 7).

Существует проект java.net для соединителя JMX WS, который зависит от проект WiseMan. Wiseman — это Java-реализация стандарта WS-Management с открытым исходным кодом.

person mjn    schedule 02.06.2009
comment
Ссылка на проект теперь: ws-jmx-connector.java.net. - person Julio; 10.05.2012


Это два, которые я прочитал, когда впервые читал о JMX.

Учебное пособие Sun: http://java.sun.com/docs/books/tutorial/jmx/index.html

Spring 2.5/JMX: http://static.springframework.org/spring/docs/2.5.x/reference/jmx.html

person Taylor Leese    schedule 13.05.2009

Или вы можете посмотреть вики тегов JMX прямо здесь, на StackOverflow, я обновил ее несколько дней назад, чтобы перечислить почти все, что вы просили, и некоторые предоставили дополнительную информацию:

https://stackoverflow.com/tags/jmx/info

person haylem    schedule 25.04.2012
comment
Я разместил этот вопрос 3 года назад. Я почти уверен, что этого не существовало. - person mainstringargs; 25.04.2012
comment
@dubdubdubdot: Вики-тег существовал, но содержимое там было либо пустым, либо другим. - person haylem; 26.04.2012
comment
Работая над этой технологией около 4 лет, несколько лет назад я представил этот доклад о введении в Java Management Extensions (JMX) по адресу youtube.com/watch?v=F-f2zYeWwwo. Слайды для этого сеанса доступны по адресу slideshare.net/tarun.telang/java. -management-extensions-jmx. - person Tarun; 18.09.2016