jps命令

jps是JDK提供的用于查看当前Java虚拟机运行了哪些Java进程。

如何分析java性能瓶颈 常用java性能分析工具_老年代

top命令

top命令使我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。

如何分析java性能瓶颈 常用java性能分析工具_堆内存_02


top -Hp pid可以查看与进程相关的线程的系统资源使用情况:

如何分析java性能瓶颈 常用java性能分析工具_应用程序_03

vmstat命令

vmstat是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还

有一个重要的常用功能,用来观察进程的上下文切换。

如何分析java性能瓶颈 常用java性能分析工具_应用程序_04


字段说明如下:

字段

说明

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 命令查看线程的堆栈信息,也经常用来排除死锁情况。

如何分析java性能瓶颈 常用java性能分析工具_老年代_05

jstat 命令

检测Java程序运行的实时情况,包括堆内存信息和垃圾回收信息,我们常常用来查看程序垃圾回收情况。常用的命令是jstat -gc pid

如何分析java性能瓶颈 常用java性能分析工具_应用程序_06


信息字段说明如下:

字段

说明

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

如何分析java性能瓶颈 常用java性能分析工具_堆内存_07

mat内存工具

MAT(Memory Analyzer Tool)工具是eclipse的一个插件(MAT也可以单独使用),它分析大内存的dump文件时,可以非常直观的看到各个对象在堆空间中所占用的内存大小、类实例数量、对象引用关系、利用OQL对象查询,以及可以很方便的找出对象GC Roots的相关信息。

idea中也有这么一个插件,就是JProfiler。