Когда вы подключаетесь к удаленной JVM, VisualVM обычно общается через интерфейс JMX, чтобы получить потоки и т. д. Однако удаленная JVM решает, что она сделает доступной для клиента, а не все, что доступно по умолчанию; поэтому возможно, что JVM, к которой вы подключаетесь, просто не поддерживает отчеты по этим характеристикам.
Предполагая, что соединение работает правильно, вы обнаружите, что существуют различные isXxxSupported
методы, возвращаемые JVM, в данном случае, возможно, ложные.
Одна вещь, которую вы можете попробовать, это запустить jcmd
на удаленном сервере (или jps
), чтобы увидеть, есть ли какие-то ограничения на процессы в поле, которые мешают вам видеть другие виртуальные машины как этого пользователя. Возможно, если он работает в чем-то вроде контейнера, то вызовы RMI для JMX не проходят, или если вы работаете в политике безопасности selinux или Java, которая не позволяет вам читать/общаться на сетевые порты или файлы.
JMXServiceURL url = new JMXServiceURL("rmi", "", 0, "/jndi/rmi://" + host + ":" + port + "/jmxrmi");
JMXConnectionFactory factory = JMXConnectorFactory.connect(url);
MBeanSearverConnection conn = factory.getMBeanServerConnection();
ThreadMXBean threads = ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.THREAD_MXBEAN_NAME,ThreadMXBean.class);
long ids[] = threads.getAllThreadIds();
Если вы можете получить идентификаторы потоков, это предполагает, что вы можете поговорить с сервером; в threads
есть и другие методы, которые позволят вам получить трассировку стека и т. д. Это будет метод, используемый VisualVM, и он может позволить вам выполнять дальнейшую отладку в отношении того, что происходит не так в ответах.
person
AlBlue
schedule
13.04.2016