Как я могу использовать JMX для доступа к потокам удаленной JVM? - PullRequest
0 голосов
/ 28 января 2011

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

Ответы [ 2 ]

2 голосов
/ 13 декабря 2016

Это очень старая тема, но так как я искал и нашел фактический ответ на этот вопрос, я могу также опубликовать его.

http://www.java2s.com/Code/Java/Development-Class/ThisFullThreadDumpclassdemonstratesthecapabilitytogetafullthreaddumpandalsodetectdeadlockremotely.htm

Выше показано оченьХороший пример того, как получить доступ ко всем потокам на удаленном JMX.

В Синопсисе:

// First connect to the remote service
String urlPath = "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi";
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, urlPath);
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection server = jmxc.getMBeanServerConnection();

// Then get all threads
ThreadMXBean tmbean = newPlatformMXBeanProxy(server, THREAD_MXBEAN_NAME, ThreadMXBean.class);
ObjectName tmbean = new ObjectName(THREAD_MXBEAN_NAME);
long[] tids = tmbean.getAllThreadIds();
ThreadInfo[] tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
for (ThreadInfo ti : tinfos) {
  // do something with this particular thread...
}

Чтобы подчеркнуть возможную необходимость написать собственный инструмент мониторинга, опрошенный @Aaron-McIver;потоки содержат много информации, и в бизнес-процессе может быть много потоков, и их невозможно просмотреть, например, в VisualVM.Может иметь смысл программировать циклы по потокам для поиска конкретных ключевых слов, времени процессора, трассировки стека, имен файлов и т. Д. *

1 голос
/ 28 января 2011

Почему бы не использовать jvisualvm , так как он входит в состав SDK и предоставит вам доступ к потокам в данной JVM среди прочего.

Нет смысла пытаться реплицировать отладкуфункции, которые уже существуют.

...