Теперь, чтобы отслеживать приложение Spring Boot с помощью JMX?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Теперь, чтобы отслеживать приложение Spring Boot с помощью JMX?

Сообщение Anonymous »

У меня есть приложение Spring Boot, работающее на моем сервере DigitalOcean. Докер не задействован. Я хочу отслеживать это приложение с помощью VisualVM через JMX, но у меня проблемы с подключением, и даже мне кажется, что я сделал все, возможно, что-то пропустил.
Итак, что я сделал:
Как В качестве доказательства концепции я создал небольшое приложение в виде простой банки, которое в цикле печатает только текущее время. Я открыл соответствующие порты на сервере, проверил с помощью netstat, что приложение прослушивает эти порты, и на своем ноутбуке проверил, что порты доступны на сервере. Затем я запускаю свое простое приложение jar, используя:

Код: Выделить всё

java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname= -jar app.jar
и это действительно сработало. Из VisualVM мне удалось подключиться и отслеживать свое приложение.
Затем я попытался создать простое ничего не делающее приложение Spring Boot и подключиться к нему, используя те же параметры (также проверено, что приложение Spring Boot прослушивает на этих портах, и они открыты), но я не смог подключиться.
Затем я попробовал запустить свои приложения Spring Boot без параметров JVM, но создал этот класс:

Код: Выделить всё

@Configuration
public class JMXConfig {

@Value("${jmx.hostname:}")
private String hostname;

@Value("${jmx.remote.port:12345}")
private int jmxRemotePort;

@Value("${jmx.rmi.port:12345}")
private int rmiPort;

@Bean
public JMXConnectorServer jmxConnectorServer() throws Exception {
LocateRegistry.createRegistry(rmiPort);

String serviceUrl = String.format("service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi", hostname, rmiPort);

HashMap env = new HashMap();
env.put("com.sun.management.jmxremote.authenticate", false);
env.put("com.sun.management.jmxremote.ssl", false);
env.put("java.rmi.server.hostname", hostname);
env.put("com.sun.management.jmxremote.local.only", false);
env.put("com.sun.management.jmxremote.rmi.port", String.valueOf(jmxRemotePort));
env.put("com.sun.management.jmxremote.port", String.valueOf(rmiPort));

JMXServiceURL jmxServiceUrl = new JMXServiceURL(serviceUrl);
JMXConnectorServer jmxServer = JMXConnectorServerFactory.newJMXConnectorServer(
jmxServiceUrl,
env,
ManagementFactory.getPlatformMBeanServer()
);
jmxServer.start();

System.out.printf("JMX Server started at: %s%n", serviceUrl);
return jmxServer;
}
}
а также в application.properties я установил: Spring.jmx.enabled=true и Management.endpoints.jmx.exposure.include=*, но все равно нет удача. Приложение прослушивает этот порт, я получаю сообщение о том, что JMX готов с правильным портом и URL-адресом, но VisualVM все равно не подключается.
Почему? Что мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-jmx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»