Java开启远程VisualVM中的VisualGC
Contents
开启远程Debug
# jdk < java9 之前(默认监听所有)
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n
# jdk >= java9(默认只监听本地, 所以要 *:端口, 开启远程)
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=*:4000,suspend=n
开启 JMX
-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
开启 Jstatd
只有开启这个, 才能在 visualVM 里使用 visualGC
vim /tmp/jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
然后启动 jstatd:
jstatd -J-Djava.security.policy=/tmp/jstatd.all.policy -J-Djava.rmi.server.hostname=${你的外网IP}
Go
执行完上面的命令后, 就可以进行远程 debug 和 查看远程的 JVM 状态了.
打开 VisualVM, 添加 Remote
(填写IP等信息), 然后在该IP主机下, 右键如下图:
选择 Add Jstatd Connection
, 然后添加个 default
选项, 这样子 VisualVM 就会自动列出当前所有 java 进程了. 这时就可以在 VisualVM 中的 VisualGC 页看到可视化GC的信息了.
自动化脚本
为了方便使用, 自己写了个自动化脚本, 放在 Github gist
在配置好 JAVA_HOME
环境变量的前提下, 直接执行该脚本即可.