在测试环境复现出了的研发自测没有发现的疑难问题如性能问题,排除服务器本身的问题之后,研发就需要定位问题。
我们可以直接远程监控测试环境的jvm查看监控进程的运行情况么?
我们可以直接远程dump测试环境的运行进程分析线程阻塞原因么?
其实仅需通过jvisualvm
这个jdk自带的图形化监控工具,去远程监控测试环境的jvm就可以解决上述问题。
Jvisualvm的启动
- windows系统配置jdk环境变量。
-
cmd输入jvisualvm直接启动 如下图
1612573934(1).jpg
以下监控方式
springboot
项目为例介绍
方式一 启动Java项目配置jmx启动参数
- 启动远程应用需指定jmx相关配置
java -jar
-Djava.rmi.server.hostname=远程服务ip
-Dcom.sun.management.jmxremote.port=18888
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
xxx.jar
-
本地jvisualvm右键远程添加远程主机ip
1612575160(1).jpg - 右键远程分组下的远程ip点击
添加JMX链接
后输入上一步指定的jmx的端口号
1612575590(1).jpg -
添加成功后即可监控应用的运行情况
1612575948(1).jpg
方式二 使用服务端jdk的jstatd
- 服务器上要安装jdk
- 在jdk的安装目录bin下新建文件jstatd.all.policy输入如下内容(也可以写绝对路径)
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
- 在jdk的安装目录bin执行jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=linux_ip
- 使用jvisualvm远程监控监控方式使用
小结
- 方式一启动时加JVM参数,可以写到启动脚本中,作用范围是当前应用
- 方式二是利用jdk的jstatd去监控,作用范围是启动在JVM上的应用
有疑问留言,如果有帮到你的话,记得点赞收藏
网友评论