JVM调优工具详解|8月更文挑战
这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战
前言: 前面主要讲解了常用的几种垃圾收集器,如有不了解的,点击 JVM垃圾回收器详解(上)-CMS收集器| 8月更文挑战与# JVM垃圾回收器详解(下)-G1收集器| 8月更文挑战前往了解,既然已经理论了解的差不多了,那么也该开始了解下JVM相关的命令了.
jps
首先启动一些自己的java服务,然后可以在命令行通过jps命令查看当前运行的java服务进程,拿到对应的进程ID
Jmap
jmap可以查看对应java进程的堆内存情况,如实例个数以及占用内存大小
- jmap -histo 52432
-
num:序号
-
instances:实例数量
-
bytes:占用空间大小
-
class name:类名称,几个特殊的类名称解释,C,B,I,[C -> char[],[S ->short[],[I ->int[],[B -> byte[]
-
jamp -heap 进程id 查看当前堆的情况
- Eden Space 伊甸区
- From Space From区
- To Space To区
- Old Generation 老年代
- capatity 总大小
- used 已使用内存
- free 可用内存
Jstack
jstack + 进程ID 可以用来查找程序中的线程状况,因此如果有死锁的情况可以用jstack来查询
由上图可以看到线程状态,BLOCKED,上下两个线程同时持有对方的锁,因此死锁,可以根据定位到是DeadLockTest.java的21行
Jinfo
- jinfo -flags 线程ID 查看程序当前JVM参数
- jinfo -sysprops 线程ID 查看java系统参数
Jstat
jstat是用的比较多的命令
- jstat -gc pid 可以查看GC情况
-
S0C:第一个幸存区的大小,单位KB
-
S1C:第二个幸存区的大小
-
S0U:第一个幸存区的使用大小S1U:第二个幸存区的使用大小
-
EC:伊甸园区的大小
-
EU:伊甸园区的使用大小
-
OC:老年代大小
-
OU:老年代使用大小
-
MC:方法区大小(元空间)
-
MU:方法区使用大小
-
CCSC:压缩类空间大小
-
CCSU:压缩类空间使用大小
-
YGC:年轻代垃圾回收次数
-
YGCT:年轻代垃圾回收消耗时间,单位s
-
FGC:老年代垃圾回收次数
-
FGCT:老年代垃圾回收消耗时间,单位s
-
GCT:垃圾回收消耗总时间,单位s 还有一些额外的命令总结一下:
-
jstat -gccapacity pid 堆内存统计
-
jstat -gcnew pid 新生代垃圾回收统计
-
jstat -gcnewcapacity pid 新生代内存统计
-
jstat -gcold pid 老年代垃圾回收统计
-
jstat -gcoldcpacity pid 老年代内存统计
-
jstat -gcmetacapatity pid 元数据空间统计
总结
以上的jvm中常用的一些命令,当然有些第三方工具可以帮我们已经封装好,可以让我们更简洁的了解到当前程序的一些状况,大家可以了解下阿里开源的Arthas,目前JVM就先告一段落。