# 系列
文章分布
- **「作者推荐!」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**

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

##### 使用VisualVM分析dump
文件
> 因为我们通常都是没办法直接在生产环境进行调优分析的,所以一般都会把相关的内存、线程的dump
文件拿到自己的电脑进行分析,VisualVM
支持导入dump
文件的方式。
1. 在需要进行内存分析的机器上把 内存或线程日志dump下来
````
jmap -dump:live,format=b,file=/home/myheapdump.hprof 18230
````
2. 用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连接

###### 连接成功

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。