Java常见性能分析工具
jps命令
jps
是JDK提供的用于查看当前Java虚拟机运行了哪些Java进程。
top命令
top
命令使我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp pid
可以查看与进程相关的线程的系统资源使用情况:
vmstat命令
vmstat
是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还
有一个重要的常用功能,用来观察进程的上下文切换。
字段说明如下:
字段 | 说明 |
---|---|
r | 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程) |
b | 等待IO的进程数量 |
swpd | 使用虚拟内存大小 |
free | 空闲物理内存大小 |
buff | 用作缓冲的内存大小(内存和硬盘的缓冲区) |
cache | 用作缓存的内存大小(CPU和内存之间的缓冲区) |
si | 每秒从交换区写到内存的大小,由磁盘调入内存 |
so | 每秒写入交换区的内存大小,由内存调入磁盘 |
bi | 每秒读取的块数 |
bo | 每秒写入的块数 |
in | 每秒中断数,包括时钟中断。 |
cs | 每秒上下文切换数。 |
us | 用户进程执行时间百分比(user time) |
sy | 内核系统进程执行时间百分比(system time) |
wa | IO等待时间百分比 |
id | 空闲时间百分比 |
jstack命令
jstack
是JDK工具命令,它是一种线程堆栈分析工具,最常用的功能就是使用 jstack pid
命令查看线程的堆栈信息,也经常用来排除死锁情况。
jstat 命令
检测Java程序运行的实时情况,包括堆内存信息和垃圾回收信息,我们常常用来查看程序垃圾回收情况。常用的命令是jstat -gc pid
:
信息字段说明如下:
字段 | 说明 |
---|---|
S0C | 年轻代中 To Survivor 的容量(单位 KB) |
S1C | 年轻代中 From Survivor 的容量(单位 KB) |
S0U | 年轻代中 To Survivor 目前已使用空间(单位 KB) |
S1U | 年轻代中 From Survivor 目前已使用空间(单位 KB) |
EC | 年轻代中 Eden 的容量(单位 KB) |
EU | 年轻代中 Eden 目前已使用空间(单位 KB) |
OC | 老年代的容量(单位 KB) |
OU | 老年代目前已使用空间(单位 KB) |
MC | 元空间的容量(单位 KB) |
MU | 元空间目前已使用空间(单位 KB) |
YGC | 从应用程序启动到采样时年轻代中 gc 次数 |
YGCT | 从应用程序启动到采样时年轻代中 gc 所用时间 (s) |
FGC | 从应用程序启动到采样时 老年代(Full Gc)gc 次数 |
FGCT | 从应用程序启动到采样时 老年代代(Full Gc)gc 所用时间 (s) |
GCT | 从应用程序启动到采样时 gc 用的总时间 (s) |
jmap命令
jmap也是JDK工具命令,他可以查看堆内存的初始化信息以及堆内存的使用情况,还可以生成dump文件来进行详细分析。查看堆内存情况命令jmap -heap pid
:
mat内存工具
MAT(Memory Analyzer Tool)工具是eclipse的一个插件(MAT也可以单独使用),它分析大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GC Roots的相关信息。
idea中也有这么一个插件,就是JProfiler。