转载

JVM监控工具

通过JVM监控,我们可以了解GC的内部过程,知道什么时候新生代的对象被移动到老年代,什么时候发生了GC,以及GC持续了多长时间。

想要进行JVM调优,必须要知道当前的JVM状态,JVM监控是必不可少的一步,这里主要介绍三种常见的JVM监控方式。

jstat

最原始却最有效的一种方式,不需要对java应用做额外的配置,安装JDK的时候默认就有的工具,当我们想要了解JVM运行状态的时候,一个jstat就能满足我们大部分的需求。

1 一般jstat与java程序安装在一起,我们可以看一下。

JVM监控工具

2 使用

# 例如:jstat -class -t 79065 1000 5,代表监控pid为79065的jvm进程,查看其class信息,并且没1s钟监控一次,总共监控5次。
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

# jstat可以监控的内容如下
jstat -options
-class 统计JVM中classload的信息
-compiler  统计JIT编译器的信息
-gc  统计GC的堆内存信息
-gccapacity    统计JVM的堆内存剩余空间
-gccause  统计导致最新一次GC的原因
-gcmetacapacity
-gcnew  统计新生代的信息
-gcnewcapacity  
-gcold  统计老年代的信息
-gcoldcapacity
-gcutil  显示GC的统计信息
-printcompilation  显示JVM的编译方法统计
复制代码
JVM监控工具

列解释:

S0C 存活区0的容量(KB) S1C 存活区1的容量(KB) S0U 存活区0使用的空间 (KB). S1U 存活区1的利用空间 (KB). EC Eden区的容量(KB). EU Eden区利用的容量(KB). OC 老年代容量(KB). OU 老年代使用容量(KB). PC 当前永久带的容量(KB). PU 永久带使用容量(KB). YGC 发生了多少次Young GC YGCT Young GC的时间 FGC Full GC的次数 FGCT Full GC的收集时间 GCT 总共的GC时间.

看到上面是不是发现,简单直接有有效。

jconsole或jvisualvm

这两个工具也是JDK自带的内容,jvisualvm可能需要在线下载一下,不过两者都是通过jmx来访问JVM然后进行统计的,在启动JVM的时候,要指定jmx的内容。

方式一:指定密码,增加安全性

java  -Dcom.sun.management.jmxremote.port=5000  -Dcom.sun.management.jmxremote.password.file=/Users/aihe/Documents/jmxremote.password   -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=/Users/aihe/Documents/jmxremote.access -jar target/jmxdemo-0.0.1-SNAPSHOT.jar
复制代码
JVM监控工具
JVM监控工具
JVM监控工具

arthas

阿里开源的一款好用的jvm监控工具,有点像是把jdk中自带的命令行工具做了集合。

1 安装

# 安装方式一
curl -L https://alibaba.github.io/arthas/install.sh | sh
# 安装方式二
java -jar arthas-boot.jar --repo-mirror aliyun --use-http
复制代码

2 使用

java -jar arthas-boot.jar
复制代码
JVM监控工具
JVM监控工具

参考地址: alibaba.github.io/arthas/inst…

注意

使用完之后记得shutdown,如果不shutdown可能存在一些问题,比如监控的仍然是上次的jvm进程,反正就先用shutdown吧。

最后

本次介绍了自己常用的监控JVM工具,如果有更好的工具,请推荐给我

原文  https://juejin.im/post/5d93d975e51d4577fa2b017c
正文到此结束
Loading...