![bdd9349b573015a50ebab8f3bfc5cf36.png](https://i-blog.csdnimg.cn/blog_migrate/924594bd72f3919b1dbdecfb4f6cec63.jpeg)
简介
作为一个程序员,经常会为如何定位java程序的问题或者去调优JVM性能而苦恼不已。也许你听过一些java的profile的强力工具,比如jprofile。但是这些工具大部分都是要收费的,对于我们个人程序员来说十分不友好。
其实JDK已经自带了很多优秀的性能调优工具,你可以在JAVA_HOME/bin中找到他们。
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多内容请访问www.flydean.com
今天我们的系列文章要介绍的是这四个工具:
- Jstat(sun.tools.jstat) 它的全称是Java Virtual Machine Statistics Monitoring Tool,是用来监控JVM状态的工具。
- jstack(sun.tools.jstack) 它的全称是Java Stack Trace,是用来做java栈的跟踪工具。
- jmap(sun.tools.jmap) 它的全称是Java Memory Map,是java的内存管理工具。
- jhat (com.sun.tools.hat.Main) 它的全称是Java Heap Analyse Tool,是java的堆分析工具。
有了这四个工具,基本上JVM运行期间的方方面面都可以被覆盖到了。下面我们将具体对每一个工具进行详细讲解。本文将会首先讲解Jstat的具体使用。
JStat命令
jstat主要对JVM运行期间的各种参数进行收集,包括查看类的加载情况,jc中新生代老年代元数据空间的使用情况等。
先看下Jstat的命令:
jstat outputOptions [-t] [-h lines] vmid [interval [count]]
- outputOptions – 选择需要输出哪些内容
- t – 在第一列输出timestamp,是从目标JVM启动时候开始算起
- h – 选择每隔n行输出列的名字,默认是0,表示只在第一行输出列的名字
- vmid – JVM的pid,可以使用jps来查看
- interval – jstat输出的时间间隔默认单位是毫秒
- count – 表示需要展示多少取样数据,默认是无限制的,表示会一直取样输出,直到JVM停止
JStat Output Options
上面我们讲了JStat命令的基本格式,在本节我们会详细讲解JStat的输出选项。
使用jstat -options可以看到jstat支持的几个options选项:
jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation
class
输出class loader的统计信息,我们举个例子:
jstat -class -t 53528 100 5
Timestamp Loaded Bytes Unloaded Bytes Time
19822.8 5214 10752.5 0 0.0 2.91
19823.0 5214 10752.5 0 0.0 2.91
19823.0 5214 10752.5 0 0.0 2.91
19823.2 5214 10752.5 0 0.0 2.91
19823.2 5214 10752.5 0 0.0 2.91
上面的例子中53528是目标JVM的pid,100表示取样的间隔时间是100ms,5表示最后只展示5条数据。
上面的Timestamp表示的JVM的启动的时间。
- Loaded – 有多少个class被加载
- Bytes – 被加载的class大小
- Unloaded – 多少class被反加载
- Bytes – 反加载的class大小
- Time – 加载和反加载class花费的时间
compiler
compiler统计的是Java HotSpot VM Just-in-Time JIT即时编译器的信息。
JIT即时编译器是为了提升代码的执行速度而产生的。JVM对于一些热点代码,比如多次循环和经常使用的方法。对于这些热点代码&#x