参考博客
https://blog.csdn.net/u010004317/article/details/82948040
https://blog.csdn.net/lienfeng6/article/details/78676760
一、在服务器上部署JMX服务
1.进入tomcat的bin目录,修改catalina.sh文件
#tomcat的bin目录,修改catalina.sh: #vim catalina.sh # 添加如下配置: CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access -Djava.rmi.server.hostname=149.129.124.xx" # -Dcom.sun.management.jmxremote.ssl 是否开启ssl传输,设为false即可 # -Dcom.sun.management.jmxremote.authenticate 是否校验,设为false即可 # -Dcom.sun.management.jmxremote.password.file 远程登录的账号管理文件,下文会讲到如何获取 # -Dcom.sun.management.jmxremote.access.file 同上 # -Djava.rmi.server.hostname 这个很重要,如果不填的话,可以重启成功,按时客户端的jvisual是无法远程连接上的,这里的IP必须是公网IP,公网IP
2.进入tomcat的conf 编辑server.xml文件,添加jmx的端口监听
server.xml文件,添加jmx的端口监听
3.添加jmx的访问控制文件
# 进入tomcat/conf的目录 # 执行以下命令 cp 复制两个文件cp $JAVA_HOME/jre/lib/management/jmxremote.password.template jmxremote.password cp $JAVA_HOME/jre/lib/management/jmxremote.access jmxremote.access vi jmxremote.password # 取消下面两行的注释,取消注释表示你可以使用这两个账号进行远程登录, 使用就打开,不使用可以不打开#monitorRole QED #controlRole R&D # 也可以自定义账号,格式如 username passwd,如我想要添加一个名称叫root的账号,密码是root@123 vim jmxremote.password # 在最后一行添加 root root@123# 修改完jmxremote.password文件,还要修改jmxremote.access文件,添加权限 zexin readwrite chmod 600 jmxremote.password chmod 600 jmxremote.access
4.添加catalina-jmx-remote.jar包到tomcat的lib目录下
在maven仓库下载,找到对应的版本
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote
5.连接测试结果
二、安装jstat服务
1. 安装好JMX后,点击 Visual GC 会显示不受JVM支持,需要安装jstat服务
2. JDK的bin目录下,配置安全策略
cd $JAVA_HOME/bin # 新建安全策略文件 vim jstatd.all.policy # 添加如下内容: grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; # 原文说明,我不么深入研究,有些文章会在$JAVA_HOME/jre/lib/security/java.policy直接修改,本人我是不推荐的,能不动 到原来的配置文件进来就不要碰到,而且在java.policy直接修改,赋予的权限太高,也不安全。
3.启动jstat
cd $JAVA_HOME/bin # 启动命令:(启动成功后,没有报错且有日志输出就是正常的) ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=149.129.124.xx -J-Djava.rmi.server.logCalls=false# 解释: # -J-Djava.rmi.server.hostname=149.129.124.xx 这里要填的是公网IP # -J-Djava.rmi.server.logCalls=true 是否开启日志,第一次配置最好开启,可以确定是否启动成功,如果是已经配置很多次了,能确保成功的,建议就把该日志关掉,因为该日志的产生量不小,容易撑爆硬盘 # 在生产环境的配置如下(去掉日志打印,加入后台运行),这里我在监控的时候,通过输入pid发现不行,不知道怎么回事,后面再查看下问题所在: ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=149.129.124.xx &
4.查看效果(在非后台模式启动下查看的)