- 安装Visual GC插件
1.打开VisualVM,点击工具,插件
安装插件方法一:
点击检查软件最新版本,出现 Visual GC,选择Visual GC,直接安装,我遇到以下问题
方法二:
1. 打开https://visualvm.github.io/pluginscenters.html
找到对应版本的Visual GC,下载*.nbm包
2. 点击“已下载-》添加插件,选择下载好的nbm包安装Visual GC”
- 连接远程应用
visualvm连接远程应用,使用jstatd方式,这时候就可以启动一个jstatd应用,供client主机连接;
1. 测试jstatd
[test]# jstatd
Could not create remote object access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:886)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.System.setProperty(System.java:794)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)
2. 用命令 command: locate tools.jar 找到tools.jar 所在目录
/usr/lib/jvm/<java_jdk>/lib/
3. 进入/usr/lib/jvm/<java_jdk>/bin/,这下面会有jstatd 文件
然后再此目录下,创建jstatd.all.policy
jstatd.all.policy
grant codebase "file:/usr/lib/jvm/<java_jdk>/lib/tools.jar" {
permission java.security.AllPermission;
};
//我用的绝对路径,网上其他地方提到的${JAVA_HOME} 在我的环境上,路径是不对的
4. chmod 777 jstatd.all.policy
5. 运行命令jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=<本机ip> -J-Djava.rmi.server.logCalls=true //hostname -i 查出的ip
Oct 09, 2020 11:06:45 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(5)-10.243.68.245: [10.243.68.245: sun.tools.jstatd.RemoteVmImpl[2080690f:1750c4dc17a:-7fca, 3564335267827464235]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]
Oct 09, 2020 11:06:45 AM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(5)-10.243.68.245: [10.243.68.245: sun.tools.jstatd.RemoteVmImpl[2080690f:1750c4dc17a:-7f79, 2893363199531248213]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]
Oct 09, 2020 11:06:45 AM sun.rmi.server.UnicastServerRef logCall
没问题后,你可以后台运行: jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=<本机ip> -J-Djava.rmi.server.logCalls=true &