一、linux性能收集和统计工具
二、JAVA性能调优之jdk命令工具
二、JDK性能收集和统计工具
jdk在性能遇到问题时,常用的查看分析命令有
- jps:类似linux中的ps;
- jstat:通过这个命令,可以查看堆信息的详细情况;
- jinfo:可统计CPU内存使用情况、swap使用情况等信息;
- jmap:导出堆快照信息进行分析;
- jstack:导出java程序的线程堆栈;
下面分别介绍这几个命令参数的
1、jps命令
使用jps [-help]得到下面的参数
- -q 只输出进程ID,而不输出类的短名称
- -m 用于输出传递给Java进程(主函数)的参数
- -l 用于输出主函数的完整路径
- -v 可以显示传递给JVM的参数
2、jstat命令
基本语法:jstat <option> [-t] [-h] <vmid> [<interval>[<count>]]
option参数 | 参数说明 |
---|---|
-class | 显示ClassLoader的相关信息 |
-compiler | 显示JIT编译的相关信息 |
-GC | 显示与GC相关的堆信息 |
-gccapacity | 显示各个代的容量及使用情况 |
-gccause | 显示垃圾收集相关信息(同-gcutil)显示最后一次或当前正在发生的垃圾收集的原因 |
-gcnewcapacity | 显示新生代大小与使用情况 |
-gcold | 显示老年代和永久代的信息 |
-gcoldcapacity | 显示老年代的大小 |
-gcpermcapacity | 显示永久代的大小 |
-gcuti | 显示垃圾收集信息 |
-printcompilation | 输出JIT编译的方法信息 |
-gcnew | 显示新生代信息 |
-t 参数可以在输出信息前加上一个Timestamp列,显示程序的运行时间。
-h 参数可以在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息。
interval 参数用于指定输出统计数据的周期,单位为毫秒
count用于指定一共输出多少次数据。
查看GC输出 jstat -gc 10620 1000 3
这里的参数说明将会包含option命令中大大部分参数
参数 | 含义 |
---|---|
S0C | s0(from)的大小(KB) |
S1C | s1(from)的大小(KB) |
S0U | s0(from)已使用的空间(KB) |
S1U | s1(from)已使用的空间(KB) |
EC | eden区的大小(KB) |
EU | eden区的使用空间(KB) |
OC | 老年代大小(KB) |
OU | 老年代已经使用的空间 |
PC | 永久区大小(KB) |
PU | 永久区使用空间(KB) |
YGC | 新生代GC次数 |
YGCT | 新生代GC耗时 |
FGC | FullGC次数 |
FGCT | FullGC耗时 |
GCT | GC总耗时 |
NGCMN | 新生代最小值(KB) |
NGCMX | 新生代最大值(KB) |
NGC | 当前新生代大小(KB) |
OGCMN | 老年代最小值(KB) |
OGCMX | 老年代最大值(KB) |
PGCMN | 永久代最小值(KB) |
PGCMX | 永久代最大值(KB) |
LGOO | 上次GC的原因 |
GCC | 当前GC原因 |
TT | 新生代对象晋升到老年代对象的年龄 |
MTT | 新生代对象晋升到老年代对象的年龄最大值 |
DSS | 所需的survivor区大小 |
SOCMX | s区的最大值(KB) |
S1CMX | s1区的最大值(KB) |
ECMX | eden区的最大值(KB) |
S0 | S0区使用的百分比 |
S1 | S1区使用的百分比 |
E | eden区使用的百分比 |
O | Old区使用的百分比 |
P | 永久区使用的百分比 |
3、jinfo命令
jinfo可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时修改部分参数。
基本语法为:jinfo
[root@localhost javademo]# jinfo -flag MaxTenuringThreshold 10620
-XX:MaxTenuringThreshold=15
修改这个参数为显示输出
[root@localhost javademo]# jinfo -flag +PrintGCDetails 10620
4、jmap命令
[root@localhost javademo]# jmap -dump:format=b,file=/opt/heap.hprof 10620
Dumping heap to /opt/heap.hprof ...
Heap dump file created
使用visualVM打开文件,进行分析即可
5、jstack命令
这里不再详说,在linux章节有简单介绍
jstack -l 71982>/opt/71982.txt**,可以看到是哪段代码出的问题。
“Thread-0” #8 prio=5 os_prio=0 tid=0x00007f77e0152800 nid=0x11a6a runnable [0x00007f77cb0c7000]
java.lang.Thread.State: RUNNABLE
at com.toto.cpu.CpuUseDemo$CpuUseMax.run(CpuUseDemo.java:15)
at java.lang.Thread.run(Thread.java:750)
三、可视化分析工具
1、JConsole
JConsole工具是JDK自带的图形化性能监控工具。通过JConsole工具,可以查看Java 应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等。本节主要介绍JConsole 工具的基本使用方法。
2、Visual VM
VisualVM是一个功能强大的多合一故障诊断和性能监控的可视化工具,它集成了多种性能统计工具的功能,使用VisualVM可以代替jstat、jmap、jhat、jstack甚至是JConsole。VisualVM便作为JDK的一部分发布,它完全免费。ViusalVM也可以作为独立的软件安装,可以在http://visualvm.java.net下载并安装VisualVM的最新版本
3、MAT
MAT是MemoryAnalyzer的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在http://www.eclipse.org/mat/下载并使用MAT
4、Jprofile
收费的
Analyzer的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在http://www.eclipse.org/mat/下载并使用MAT
4、Jprofile
收费的