JVM常用工具
1. jps
jps是用来查看java进程的工具
1.1 jps -q
jps -q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
1.2 jps -m
jps -m 输出main方法的参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1Tsc0j5-1595839250340)
1.3 jps -v
输出jvm的参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3XZtgdyG-1595839250346)
1.4 jps -l
输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4S1LWc2-1595839250348)
2. jstat
主要用于对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
2.1 参数解释
Usage: jstat -help|-options
jstat - [-t] [-h] [ []]
参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval[s|ms] —— 间隔时间,单位为秒或者毫秒,默认为ms。必须是正整型。
count — 打印次数,如果缺省则打印无数次
输出参数:
-hn 每个n行输出一次列表头。默认为0,仅输出一次。
-tn 在第一列输出时间戳。该时间戳从jvm启动开始。
-JjavaOption
具体参数:
-class: 统计class loader 行为信息
-compiler: 统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(新生代、老生代、永久代)相应的heap容量信息
-gccause:统计gc的情况,以及引起gc的事情。同-gcutil
-gcnew:统计新生代的gc情况
-gcnewcapacity:统计新生代gc时heap的容量信息
-gcold:统计老生代的gc情况
-gcoldcapacity:统计老生代gc时heap容量信息
-gcpermcapacity:统计永久代gc时的容量信息
-gcutil:统计heap的gc情况
-printcompilation:没用过
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eL7x6pFL-1595839250350)(/Users/dengquanliang/Library/Application%20Support/typora-user-images/image-20200727145237064.png)]
jstat -gcutil 47965 250 20: 进程号47965,每隔250ms进行一次采样,采样20次,如果没有表示一直采样
S0和S1分别表示Heap上Survivor0和Survivor1的使用百分比
E表示Eden的使用百分比
O表示Old space的使用百分比
M表示元数据区使用比例
CCS表示压缩使用比例
YGC和YGCT分别表示从程序启动到采样时发生的young GC次数和Young GC所用的时间(单位时秒)
FGC和FGCT分别表示从程序启动到采样时发生的full GC次数和full GC所用的时间(单位时秒)
GCT表示从程序启动到采样时垃圾回收所用的时间(单位时秒)
3. jmap
可以打印出java进程的内存内对象的使用情况,可以把内存的deap信息打印出来,然后使用内存分析工具MAT(Memory Analysis Tool)进行分析,也可以结合jhat(java heap analysis tool)分析
Usage:
jmap [option]
2.1 用法
1、jmap -dump:format=b,file=hotel_sc.hprof pid
将内存的二进制文件dump下来,文件名称:hotel_sc.hprof
然后可以使用MAT或者jhat分析
2、jmap -heap pid
打印堆的配置信息以及堆的使用情况
4. jstack
Jstack用于打印出给定的Java进程ID或core file或远程调试服务的Java堆栈信息
4.1 jstack -l
jstack -l pid: -l参数用于打印出锁相关的信息