首页 > 技术文章 > jvisualvm安装Visual GC插件以及连接远程应用

sweetyzj 2020-10-09 16:26 原文

  • 安装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 &

 

推荐阅读