我们都知道JDK里边自带的 jmap 命令可以获取到 JVM 的内存信息。为了实时监控 JVM 的状态,需要在一定的周期内持续获取数据。
通过搜索,知道了 JMX(Java Management Extensions)
-
解压 jmx_example.zip:
unzip jmx_examples.zip
-
编译com/example下的java程序:
javac com/example/*.java
-
运行Main:
java -Dcom.sun.management.jmxremote.port=9999 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ com/example/Main
注:-Dcom.sun.management.jmxremote.port 是为了指定需要远程监控时获取数据的端口。
-Dcom.sun.management.jmxremote.authenticate=false 是指定是否需要验证。
-Dcom.sun.management.jmxremote.ssl=false 通过SSL方式访问。
-
在远程终端通过 JDK 自带的 jconsole 查看:
jconsole
然后就可以看到如图所示的界面:
在远程地址中输入IP:port后,点击连接就可以看到如下界面: -
通过 jmx client 方式获取 MBEAN ,例如获取Threading BEAN 下的DaemonThreadCount:
java -jar jmxclient.jar - localhost:9999 java.lang:type=Threading DaemonThreadCount