美文网首页
使用Visual VM监控远程(Centos上的)Tomcat

使用Visual VM监控远程(Centos上的)Tomcat

作者: 码农梦醒 | 来源:发表于2017-12-09 22:46 被阅读21次

1. 本机安装好Visual VM, 并安装好相关插件

2. tomcat中开启jmx支持

catalina.sh

JAVA_OPTS="-Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.port=开放给jmx使用的端口.如:9004 
 -Dcom.sun.management.jmxremote.authenticate=false 
 -Dcom.sun.management.jmxremote.ssl=false 
 -Djava.net.preferIPv4Stack=true  
 -Djava.rmi.server.hostname=自己远程服务器ip(如:192.168.2.116)"

-Dcom.sun.management.jmxremote.authenticate=false 表示是否启用鉴权

如果启用了鉴权(值为true), 则还需要指定 access.file文件 和 password.file文件. 文件名随意

access.file 的内容为:

monitorRole readonly
controlRole readwrite

password.file的内容为:

monitorRole tomcat
controlRole tomcat

鉴权配置可参考:
http://blog.csdn.net/bjnihao/article/details/51546492
http://blog.51cto.com/aiilive/1730136

启用鉴权的配置:

JAVA_OPTS="
    -Djava.rmi.server.hostname=192.168.88.29
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=8089
    -Dcom.sun.management.jmxremote.ssl=false
    -Dcom.sun.management.jmxremote.authenticate=true
    -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
    -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access"

-Dcom.sun.management.jmxremote.password.file 用于指定 password.file文件位置

-Dcom.sun.management.jmxremote.access.file 用于指定 access.file 文件位置

-Djava.net.preferIPv4Stack=true 标识IP V4优先

-Dcom.sun.management.jmxremote.ssl=false 表示是否启用SSL连接

到这一步如果不使用Visual GC的功能,就可以停止了,如果需要使用Visual GC的功能,则还需要加入Jstatd的配置

3. 编辑 $JAVA_HOME/jre/lib/security/java.policy 文件

原始内容大概是这样:

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

grant {
        permission java.lang.RuntimePermission "stopThread";
        permission java.util.PropertyPermission "java.version", "read";
        permission java.util.PropertyPermission "java.vendor", "read";

        ...省略...
       
        permission java.util.PropertyPermission "java.vm.vendor", "read";
        permission java.util.PropertyPermission "java.vm.name", "read";
}

在 grant 块里面加入配置 permission java.security.AllPermission;

最终结果大概这样: 注意最后添加的那一句

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};

grant {
        permission java.lang.RuntimePermission "stopThread";
        permission java.util.PropertyPermission "java.version", "read";
        permission java.util.PropertyPermission "java.vendor", "read";

        ...省略...
       
        permission java.util.PropertyPermission "java.vm.vendor", "read";
        permission java.util.PropertyPermission "java.vm.name", "read";
        permission java.security.AllPermission;
}

4. 启动jstatd

cd $JAVA_HOME/bin
jstatd -J-Djava.security.policy=all.policy & -p 10003(指定一个未占用端口) &

5. 查看jstatd占用的端口

netstat -anp | grep jstatd

如果启用了防火墙, 记得开放这个端口.

p.s. 这里还要注意一点就是,jstatd实际上会启动两个端口, 一个是在4步骤中配置的 -p 10003这个自定义端口, 还会随机启动另外一个端口, 这个端口,也要让防火墙开放(注意:这个端口每次重启都会改变,因为这是个随机端口)

6. 在Visual VM中新建远程连接, 指定远程服务器的IP和端口就可以了.

相关文章

网友评论

      本文标题:使用Visual VM监控远程(Centos上的)Tomcat

      本文链接:https://www.haomeiwen.com/subject/daopixtx.html