1. 下载完visualvm,打开:
显示界面见上图。左边导航栏有local和remote选项,这里主要说一下remote进程的监控
2.进程机器需要启动jstatd进程,命令为:
jstatd -J-Djava.security.policy=jstatd.all.policy
jstatd命令为JDK自带的命令,默认绑定端口1099. 这里的jstatd.all.policy文件是自己新建的文件,内容为:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
最好把jstatd.all.policy文件放到jdk的bin目录下,指定文件时默认会查找现在的目录。如果指定文件不对,会抛出如下异常:
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:374)
at java.security.AccessController.checkPermission(AccessController.java:549)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.System.setProperty(System.java:725)
at sun.tools.jstatd.Jstatd.main(Jstatd.java:122)
另外,jstatd会跟本地的一个ip地址绑定(网上都说是hostname -i显示的ip地址,没有验证),可以启动时指定绑定IP:
jstatd -J-Djava.rmi.server.hostname=192.168.1.115 -J-Djava.security.policy=jstatd.all.policy -p 11099
上面的命令把进程hostname绑定到192.168.1.115. -p指定商品为11099
3. 在visualevm的remote结点下,右键Add Remode Host,添加server ip地址,应该可以自动显示出机器上的java进程了(上面的截图是从我本地发出的,监控一台机器的进程,其中tomcat的Threads tab不知道为什么没有把Threads的详细信息显示出来,只显示了Daemon和Live threads线程数量,还在研究)