1 以rmi协议连接
jvm启动时添加参数(更多参数参考https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html)
- -Dcom.sun.management.jmxremote.port=8888
- -Dcom.sun.management.jmxremote.authenticate=false
- -Dcom.sun.management.jmxremote.ssl=false
打开jconsole
以ip:port(127.0.0.1:8888)方式连接
以协议URL(service:jmx:rmi:///jndi/rmi://127.0.0.1:8888/jmxrmi)方式连接
2 以jmxmp协议连接
jmxmp协议是jmx的可选协议,默认jdk是不带相关api的,所以要下载jar包jmxremote_optional(点击这里下载)放到"${JAVA_HOME}/jre/lib/ext/"。以jmxmp协议连接,java程序要自己创建jmxmp的jmx connector(因为jvm不会创建),创建也很简单,在spring框架下初始化一个Bean即可。如果程序中已经有jmxmp的connector(忽略)
// 端口可配置
@Value("${jmx.port:0}")
private int jmxPort = 0;
//只有配置了jmx.port且值大于0的时候才启动jmxmp connector
@ConditionalOnExpression("T(Integer).valueOf('${jmx.port:0}') > 0 ")
@Bean
public ConnectorServerFactoryBean connectorServerFactoryBean() {
ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
connectorServerFactoryBean.setServiceUrl("service:jmx:jmxmp://0.0.0.0:" + jmxPort);
connectorServerFactoryBean.setThreaded(true);
connectorServerFactoryBean.setDaemon(true);
return connectorServerFactoryBean;
}
打开jconsole,如果${JAVA_HOME}/jre/lib/ext/中没有jmxremote_optional包,则用一下命令打开jconsole
jconsole -J-Djava.class.path=${JAVA_HOME}/lib/jconsole.jar:${JAVA_HOME}/lib/tools.jar:connector-path(jmxremote_optional包路径或其所在的文件夹)
,然后以协议url方式(service:jmx:jmxmp://127.0.0.1:6666)连接