写点什么

🏆「作者推荐」【JVM 性能分析】精心准备了一套 JVM 分析工具的锦囊(中部)

发布于: 2 小时前
🏆「作者推荐」【JVM 性能分析】精心准备了一套 JVM 分析工具的锦囊(中部)

系列文章分布

堆转储快照分析工具

  • jvisualvm 也是 JDK 自带的命令,虽然后面独立发展了。这两种方式都可以使用。

  • VisualVM 链接:https://visualvm.github.io/


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

离线分析工具(VisualVM)

VisualVM 安装

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


VisualVM 插件安装

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


使用 VisualVM 分析 dump 文件

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


  1. 在需要进行内存分析的机器上把 内存或线程日志 dump 下来


 jmap -dump:live,format=b,file=/home/myheapdump.hprof 18230
复制代码


  1. 用 VisualVM 打开 dump 文件


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


概要信息 (相当于 Jinfo 指令获取的信息)
  • 这里面主要可以了解 JVM 环境配置、JDK 版本,应用基本信息。

  • 包括基本信息(dump 文件的基本信息)、环境(jdk 基本信息)、系统属性(应用参数信息)。


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

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


VisualVM 本地监控

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


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
复制代码


第三步:开放端口访问限制
  • 防火墙:Dcom.sun.management.jmxremote.port 对应端口

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

第四步:VisualVM 进行远程连接

添加远程服务器



建立 JMX 连接



连接成功



发布于: 2 小时前阅读数: 5
用户头像

我们始于迷惘,终于更高水平的迷惘。 2020.03.25 加入

🏆 【酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“】 🏅 【Java技术领域,MySQL技术领域,APM全链路追踪技术及微服务、分布式方向的技术体系等】 🤝未来我们希望可以共同进步🤝

评论

发布
暂无评论
🏆「作者推荐」【JVM 性能分析】精心准备了一套 JVM 分析工具的锦囊(中部)