「作者推荐!」JVM研究系列-精心准备了一套JVM分析工具的锦囊(中部)

简介: 「作者推荐!」JVM研究系列-精心准备了一套JVM分析工具的锦囊(中部)

堆转储快照分析工具


  • jvisualvm 也是 JDK 自带的命令,虽然后面独立发展了。这两种方式都可以使用。
  • VisualVM 链接:visualvm.github.io/

使用 VisualVM 分析上面 jmap 导出的堆栈转储文件,导入后如下:




离线分析工具(VisualVM)


VisualVM安装


VisualVM 不需要额外安装,我们安装JDK的时候就自带了VisualVM,在安装JDK的 bin目录下可以找到jvisualvm.exe


image.png



VisualVM插件安装


点击工具->插件,在窗口栏里选择自己需要的插件进行在线安装。

image.png



使用VisualVM分析dump文件


因为我们通常都是没办法直接在生产环境进行调优分析的,所以一般都会把相关的内存、线程的dump文件拿到自己的电脑进行分析,VisualVM 支持导入dump文件的方式。


  1. 在需要进行内存分析的机器上把 内存或线程日志dump下来
jmap -dump:live,format=b,file=/home/myheapdump.hprof 18230
复制代码



  1. 用VisualVM打开dump文件

点击 文件->装入 选择你需要分析的dump文件后会出现下图分析界面。


image.png


概要信息 (相当于Jinfo指令获取的信息)


  • 这里面主要可以了解JVM环境配置、JDK版本,应用基本信息。
  • 包括基本信息(dump文件的基本信息)、环境(jdk基本信息)、系统属性(应用参数信息)。


image.png



类信息(相当于Jmap 指令获取的信息)


在这个栏目里面主要关注的是对应类型的对象 在内存中的实例对象实例树 、总占用空间大小分别是多少,如果是因为产生大对象、或者突然产生大批量的对象则可以通过这里定位到问题


image.png


VisualVM本地监控


本地监控很简单,打开VisualVM 就可以从左侧栏目里看到本机的应用,点击对应的应用就可以看到对应的内存、线程、GC信息


image.png




VisualVM远程监控


VisualVM不仅能监控本地的应用程序,还可以监控远程服务器上的应用,虽然远程监控一般不会用于生产环境的,但是在测试环境做一些压力测试做一些性能的预调优,这个时候使用VisualVM来远程监控测试服务器的JVM使用情况,这样有助于我们了解到JVM的实时运行状态而进行优化和调整。



第一步:应用配置jmx支持

需要使用VisualVM监控某个远程服务器的JVM应用,那么首先要对需要配置远程监控应用对MX的支持



配置方式:jar包启动直接 java -jar 后面跟参数;tomcat启动则需编辑tomcat的catalina.sh配置文件增加JAVA_OPTS配置



jar 包启动配置案例
nohup java -Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.port=8999 
 -Dcom.sun.management.jmxremote.local.only=true 
 -Dcom.sun.management.jmxremote.authenticate=true 
 -Dcom.sun.management.jmxremote.ssl=false 
 -Dcom.sun.management.jmxremote.rmi.port=8999 
 -Dcom.sun.management.jmxremote.access.file=jmx.access 
 -Dcom.sun.management.jmxremote.password.file=jmx.password 
 -Djava.rmi.server.hostname=159.138.47.89 
  -jar jstx-server.jar&
复制代码



需要注意的参数:


  • Dcom.sun.management.jmxremote.port //指定jms通讯端口,这个随意只要不与其他应用冲突即可。
  • Djava.rmi.server.hostname         //连接IP,填写当前服务器的外网IP。
  • Dcom.sun.management.jmxremote.ssl //是否位加密连接。
  • Dcom.sun.management.jmxremote.authenticate//是否进行权限连接认证,flase 不需要,ture的话就需要指定用户名,密码配置。
  • management.jmxremote.access.file // 用户名 和对应用户的权限配置
  • Dcom.sun.management.jmxremote.password.file //用户名对应的密码
  • 创建用户名密码
  • 如果Dcom.sun.management.jmxremote.authenticate 配置为true则需要进行此步骤。




编辑 jmx.access 文件添加用户名 并指定权限

命令

vim jmx.access

添加内容

admin readwrite

jmx.password文件里指定用户名和对应密码

命令

vim jmx.access

添加内容

admin 123456

修改password,access文件访问权限

Chmod –R 600 jmx.password
 Chmod –R 600 jmx.access
复制代码




第二步:建立内网公网IP映射


如果是云服务器则需要建立局域网与公网IP映射

vim /etc/hosts


image.png


第三步:开放端口访问限制


  • 防火墙:Dcom.sun.management.jmxremote.port 对应端口
  • 云服务器安全组策略 开放Dcom.sun.management.jmxremote.port对应的端口



第四步:VisualVM进行远程连接
添加远程服务器

image.png

建立JMX连接

image.png

连接成功

image.png








相关文章
|
Arthas 监控 Java
|
算法 Oracle Java
深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
110 0
|
存储 前端开发 rax
「技术翻译」JVM研究系列「绝版敲门砖」带你进入JVM-ZGC垃圾回收器的时代和未来
「技术翻译」JVM研究系列「绝版敲门砖」带你进入JVM-ZGC垃圾回收器的时代和未来
133 0
|
算法 Java Linux
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【下部】
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【下部】
165 0
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【下部】
|
算法 Java 编译器
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【上部】
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【上部】
145 0
「月光宝盒」JVM研究系列「技术总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"【上部】
|
Java
「作者推荐!」JVM研究系列「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!
「作者推荐!」JVM研究系列「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!
76 0
「作者推荐!」JVM研究系列「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!
|
自然语言处理 Rust JavaScript
「作者推荐!」JVM研究系列-JDK/JVM 的新储君—GraalVM 和 Quarkus
「作者推荐!」JVM研究系列-JDK/JVM 的新储君—GraalVM 和 Quarkus
262 0
「作者推荐!」JVM研究系列-JDK/JVM 的新储君—GraalVM 和 Quarkus
|
存储 缓存 监控
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
171 0
「作者推荐!」JVM研究系列-虚拟机分析与调优技巧分析(回顾篇)
|
Arthas 监控 数据可视化
「作者推荐」【JVM性能分析】 精心准备了一套JVM分析工具的锦囊(上部)
「作者推荐」【JVM性能分析】 精心准备了一套JVM分析工具的锦囊(上部)
179 0
「作者推荐」【JVM性能分析】 精心准备了一套JVM分析工具的锦囊(上部)
|
监控 数据可视化 算法
JDK中自带的JVM分析工具
解决常规的JVM异常时,通常依赖JDK中基础工具即可完成问题的定位,从而进行分析和解决,不过这些需要对基础工具熟练使用才行,而很多JDK自身的能力又是经常被忽略的;
237 0
JDK中自带的JVM分析工具