У меня есть встроенное приложение Jetty, работающее локально, и к нему подключена jconsole. Когда я подписываюсь на уведомления от java.lang.Memory, я не вижу никаких уведомлений, даже когда я запускаю сборку мусора вручную. Я новичок в JMX, но понимаю, что mbeans платформы, такие как GarbageCollectorMXBean и MemoryMXBean, должны быть доступны по умолчанию и не нуждаются в настройке. Это правильно?
Я настраиваю JMX следующим образом, где server - это сервер пристани:
private void configureJmx(CommandLine cmd) {
String jmxRmiHost = cmd.getOptionValue("jmxRmiHost");
String jmxRmiPortString = cmd.getOptionValue("jmxRmiPort");
String jmxPasswordFile = cmd.getOptionValue("jmxPasswordFile");
String jmxAccessFile = cmd.getOptionValue("jmxAccessFile");
if (jmxRmiHost != null || jmxRmiPortString != null || jmxPasswordFile != null || jmxAccessFile != null) {
if (jmxRmiHost == null || jmxRmiPortString == null || jmxPasswordFile == null || jmxAccessFile == null) {
throw new IllegalStateException("If any of -jmxRmiHost, -jmxRmiPort, -jmxPasswordFile or -jmxAccessFile "
+ "are set, then all of them must be");
} else {
int jmxRmiPort = Integer.valueOf(jmxRmiPortString);
MBeanContainer mbContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
server.addEventListener(mbContainer);
server.addBean(mbContainer);
server.addBean(Log.getLog());
String rmiUrl = "/jndi/rmi://" + jmxRmiHost + ":" + jmxRmiPort + "/jmxrmi";
try {
JMXServiceURL jmxServiceUrl = new JMXServiceURL("rmi", jmxRmiHost, jmxRmiPort, rmiUrl);
Map<String, String> jmxEnvironment = new HashMap<String, String>(2);
jmxEnvironment.put("jmx.remote.x.password.file", jmxPasswordFile);
jmxEnvironment.put("jmx.remote.x.access.file", jmxAccessFile);
String name = "org.eclipse.jetty.jmx:name=rmiconnectorserver";
ConnectorServer connectorServer = new ConnectorServer(jmxServiceUrl, jmxEnvironment, name);
connectorServer.start();
} catch (Exception e) {
throw new RuntimeException("Unable to configure JMX: " + e);
}
}
}
}
Предположительно, в jconsole я смогу просто выбрать mbean на вкладке MBeans и нажать «подписаться», чтобы увидеть его уведомления?
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: просто попытался добавить следующие аргументы при вызове java. По-прежнему не повезло.
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \