Как использовать программный доступ к памяти через JMX?

Я ищу образец Java JMX-кода для доступа к значениям атрибутов JMX из другой виртуальной машины.

С JConsole у меня нет проблем с поиском java.lang / Memory / Attributes / HeapMemory

Как получить ту же информацию из Java-программы, запущенной в VM?

Примеры любых необходимых параметров командной строки или другие вещи, которые нужно начинать оценивать.

Вам нужно настроить JMXConnector. Вот fragment кода, который будет использовать захваченную память кучи на удаленной машине.

String host ="myHost"; int port = 1234; HashMap map = new HashMap(); String[] credentials = new String[2]; credentials[0] = user; credentials[1] = password; map.put("jmx.remote.credentials", credentials); JMXConnector c = JMXConnectorFactory.newJMXConnector(createConnectionURL(host, port), map); c.connect(); Object o = c.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage"); CompositeData cd = (CompositeData) o; System.out.println(cd.get("committed")); private static JMXServiceURL createConnectionURL(String host, int port) throws MalformedURLException { return new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi"); } 

Если вы не заботитесь о безопасности, вы можете установить для карты значение null. Вам нужно запустить удаленный сервер;

 -Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 

Вы можете взглянуть на wlshell, которая представляет собой небольшую утилиту, которая позволяет вам получить доступ к MBeans на удаленном сервере с помощью текстового интерфейса или скрипта. Его можно использовать с WebLogic, но она работает для любой Java-программы, в которой вы включили удаленное наблюдение.

@ Ответ Кира выглядит неплохо, но я подумал, что добавлю некоторые подробности о моем пакете SimpleJMX . Он содержит серверную поддержку, которая позволяет легко экспортировать компоненты, а также простой клиентский интерфейс, который работает против любой JVM, которая экспортирует информацию JMX.

Чтобы получить доступ к памяти, вы должны сделать что-то вроде:

 JmxClient client = new JmxClient("some.host.name", somePortNumber); // get the memory composite information CompositeData composite = (CompositeData)client.getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage"); System.out.println(composite.get("committed")); 
 // Retrieve memory managed bean from management factory. MemoryMXBean memBean = ManagementFactory.getMemoryMXBean() ; MemoryUsage heap = memBean.getHeapMemoryUsage(); MemoryUsage nonHeap = memBean.getNonHeapMemoryUsage(); // Retrieve the four values stored within MemoryUsage: // init: Amount of memory in bytes that the JVM initially requests from the OS. // used: Amount of memory used. // committed: Amount of memory that is committed for the JVM to use. // max: Maximum amount of memory that can be used for memory management. System.err.println(String.format("Heap: Init: %d, Used: %d, Committed: %d, Max.: %d", heap.getInit(), heap.getUsed(), heap.getCommitted(), heap.getMax())); System.err.println(String.format("Non-Heap: Init: %d, Used: %d, Committed: %d, Max.: %d", nonHeap.getInit(), nonHeap.getUsed(), nonHeap.getCommitted(), nonHeap.getMax())); 

Так вы получаете память MemoryXXBean удаленно (в дополнение к ответу Адамски):

 MemoryMXBean memoryMXBeanProxy = JMX.newMXBeanProxy( conn, new ObjectName("java.lang:type=Memory"), MemoryMXBean.class); 
Interesting Posts

Преобразование из производного ** в базу **

Функция jQuery ajax error

Прозрачный AlertDialog имеет черный фон

Получение черного экрана для ноутбука

Как я могу получить список всех зарегистрированных пользователей (через весеннюю безопасность), мое веб-приложение

Как преобразовать Int в беззнаковый байт и обратно

Ресурс Java как файл

Использует ли Tor запрет моему ISP / sysadmin видеть, какие сайты я посещаю?

Что такое регулярное выражение для извлечения всех emojis из строки?

Является ли потомок HttpSession безопасным, установлены / получаются операции с атрибутами streamа атрибутов?

Java SimpleDateFormat для часового пояса с разделителем двоеточия?

Анализ ISO-8601 DateTime в java

разница между функцией flush и close в случае файлового ввода в java

Какая работа была выполнена для кросс-платформенной мобильной разработки?

Как установить Ubuntu, Windows XP и Windows 7 с нуля в качестве системы с тремя загрузками

Давайте будем гением компьютера.