Получить информацию о потоках (процессоре, памяти), работающих на JVM (Jboss), и другую информацию о jvm

Я хочу написать приложение на Java, которое будет получать информацию о процессах и потоках, работающих на Jboss JVM (использование% CPU, памяти и т. Д.). Я также хочу найти информацию об использовании памяти и других важных вещах в JVM (JBoss). Как написать это в чистом Java?

Я знаю о таких вещах, как JConsole, но мне нужно написать это самому. Я нашел интерфейс java.lang.managament, который дает некоторую информацию о системе, памяти и т. Д., Но не вся необходимая информация предоставляется. Например, я хотел бы иметь возможность читать использование процессора (не время процессора) и память, используемую каждым потоком. (что-то вроде команды top в bash, но мне нужно сделать это в java).

Любая помощь?

РЕДАКТИРОВАТЬ: В конце концов я могу использовать некоторые библиотеки, чтобы получить эту информацию.

3 ответа

Решение

JBoss AS 7 предоставляет различные интерфейсы управления. Все интерфейсы управления основаны на представлении Detyped Management (jboss-dmr).

Вы можете реализовать пользовательский Java-клиент с помощью библиотеки jboss-dmr и jboss-as-controller-client. Для примера посмотрите наш репозиторий github.

Чтобы получить информацию о JVM и других вещах, вам необходимо выполнить следующую операцию:

ModelNode operation = new ModelNode();
operation.get("operation").set("read-resource");
operation.get("recursive").set(true);
operation.get("include-runtime").set(true);
ModelNode address = operation.get("address");
address.add("core-service", "platform-mbean");

Кроме того, вы также можете использовать PlatformMBeanServer:

    //Get a connection to the JBoss AS MBean server on localhost
    String host = "localhost";
    int port = 9999;  // management-native port
    String urlString = "service:jmx:remoting-jmx://" + host + ":" + port;
    JMXServiceURL serviceURL = new JMXServiceURL(urlString);
    JMXConnector jmxConnector = JMXConnectorFactory.connect(serviceURL, null);
    MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();

    //Invoke on the JBoss AS MBean server
    connection.getObjectInstance(new ObjectName("java.lang:type=Threading"));
    //...
    jmxConnector.close();

Вы можете попробовать Java Melody. Это очень хороший инструмент для мониторинга Java-приложений. проверить инструмент по ссылке ниже

https://code.google.com/p/javamelody/

-Sushitha

Как заявил Адам, существует несколько инструментов для мониторинга использования ресурсов java/jboss, еще один - JBoss RHQ.

Но если вам действительно нужно запрограммировать его самостоятельно, возможно, вы найдете некоторую полезную информацию, обращающуюся к jboss.system:type=ServerInfo mbean(проверьте его атрибуты, а также методы: listMemoryPools, listThreadCpuUtilization,listThreadDump ...). Вы можете получить к ним доступ с помощью консоли JMX или программно.

Другие вопросы по тегам