这篇文章仅针对HostSpot虚拟机
第一步,写一个测试的policy文件,命名为test.policy,指定可以访问tools.jar,内容如下:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
第二步,编写一个测试程序TestJVisualVM.java:
import java.util.HashMap; import java.util.Map; /** * * 测试jvisualvm的监控功能 * */ public class TestJVisualVM { public static void main(String[] args) throws InterruptedException { // 模拟占用资源的部分 for(int i = 0; i < 100; i++){ Map<String, String> map = new HashMap<String, String>(); map.put("" + i, "" + i); Thread t = new Thread(){ public void run(){ try { Thread.sleep(200 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); // sleep 1s Thread.sleep(1000); } } }
第三步,编译:
javac -encoding utf8 TestJVisualVM.java
第四步,运行:
java -Djava.security.policy=test.policy -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=10990 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false TestJVisualVM
第五步,配置jvisualvm
先添加远程主机,再添加远程JMX端口,端口要和启动文件中-Dcom.sun.management.jmxremote.port=10990 指定的一致。
点击OK后双击,如果看到下图就说明配置正常了:
如果看到错误:
检查端口,如果显示0 :::10990
检查参数:-Djava.net.preferIPv4Stack=true
[ssergsw@JAZX5FVM-121-119 dubbo-antifraud]$ netstat -an | grep 10990
tcp 0 0 :::10990 :::* LISTEN
如果看到下面的监听,应该就能正常访问了:
[ssergsw@JAZX5FVM-121-119 dubbo-antifraud]$ netstat -an | grep 10990
tcp 0 0 0.0.0.0:10990 0.0.0.0:* LISTEN