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

# 系列文章分布 - **「作者推荐!」JVM研究系列-精心准备了一套JVM分析工具的锦囊(上部)** - jps 进程监控工具的使用 - jstat性能监控工具的使用 - jinfo 参数配置监控工具的使用 - jmap内存监控工具的使用 - jstack线程监控工具的使用 - **「作者推荐!」JVM研究系列-精心准备了一套JVM分析工具的锦囊(中部)** - **JVM离线分析工具(VisualVM),用于分析dump下来的堆内存文件,远程监控JVM状态。** - **「作者推荐!」JVM研究系列-精心准备了一套JVM分析工具的锦囊(下部)** - **第三方在线监控工具(Arthas的使用)** ## 堆转储快照分析工具 - jvisualvm 也是 JDK 自带的命令,虽然后面独立发展了。这两种方式都可以使用。 - VisualVM 链接:https://visualvm.github.io/ 使用 VisualVM 分析上面 jmap 导出的堆栈转储文件,导入后如下: ### 离线分析工具(VisualVM) #### VisualVM安装 > **VisualVM 不需要额外安装,我们安装JDK的时候就自带了VisualVM,在安装JDK的 bin目录下可以找到jvisualvm.exe** ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3a3cc6d5763944848e3fc4df565160dd~tplv-k3u1fbpfcp-zoom-1.image) #### VisualVM插件安装 点击工具->插件,在窗口栏里选择自己需要的插件进行在线安装。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fe24db0c8b684bce97a280c5b883f405~tplv-k3u1fbpfcp-zoom-1.image) ##### 使用VisualVM分析dump文件 > 因为我们通常都是没办法直接在生产环境进行调优分析的,所以一般都会把相关的内存、线程的dump文件拿到自己的电脑进行分析,VisualVM 支持导入dump文件的方式。 1. 在需要进行内存分析的机器上把 内存或线程日志dump下来 ```` jmap -dump:live,format=b,file=/home/myheapdump.hprof 18230 ```` 2. 用VisualVM打开dump文件 > **点击 文件->装入 选择你需要分析的dump文件后会出现下图分析界面。** ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c24d16b1b0ea4135a446484a15bf5fad~tplv-k3u1fbpfcp-zoom-1.image) ##### 概要信息 (相当于Jinfo指令获取的信息) - 这里面主要可以了解JVM环境配置、JDK版本,应用基本信息。 - 包括基本信息(dump文件的基本信息)、环境(jdk基本信息)、系统属性(应用参数信息)。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d4778de0f9a446e48d84f1eec84dc9e2~tplv-k3u1fbpfcp-zoom-1.image) ##### 类信息(相当于Jmap 指令获取的信息) > **在这个栏目里面主要关注的是对应类型的对象 在内存中的实例对象实例树 、总占用空间大小分别是多少,如果是因为产生大对象、或者突然产生大批量的对象则可以通过这里定位到问题**。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9c5bb0d2ea4f49b1a611d9e438c27c08~tplv-k3u1fbpfcp-zoom-1.image) #### VisualVM本地监控 > **本地监控很简单,打开VisualVM 就可以从左侧栏目里看到本机的应用,点击对应的应用就可以看到对应的内存、线程、GC信息**。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7b6bbc86cc3544cda50bc2d25e593f09~tplv-k3u1fbpfcp-zoom-1.image) #### 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 ```` ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d13113510044eda835768477c103c60~tplv-k3u1fbpfcp-zoom-1.image) ##### 第三步:开放端口访问限制 - 防火墙:Dcom.sun.management.jmxremote.port 对应端口 - 云服务器安全组策略 开放Dcom.sun.management.jmxremote.port对应的端口 ##### 第四步:VisualVM进行远程连接 ###### 添加远程服务器 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c6dc01cdc3234bc6ab46fc3ffabf0e37~tplv-k3u1fbpfcp-zoom-1.image) ###### 建立JMX连接 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f6218a2dd8a443ee83c94af4eb1ec0e1~tplv-k3u1fbpfcp-zoom-1.image) ###### 连接成功 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/de2ba0629a064036bd83ffa655a34c0f~tplv-k3u1fbpfcp-zoom-1.image)
上一篇:Delphi遍历枚举


下一篇:mysql发展简史