JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo介绍

jps

查看所有的jvm进程,包括进程ID,进程启动的路径等等。

我自己也用PS,即:ps -ef | grep java

jps -l 输出应用程序主类完整package名称或jar完整名称.
jps -v 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数

jstack

观察jvm中当前所有线程的运行情况和线程当前状态。

系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。

系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

jstack pid  
jstack -l 4089 >1.txt
参考上篇博客

jstat

jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;

特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

-----jstat -class pid-----类加载统计
Loaded:加载class的数量,
Bytes:所占用空间大小,
Unloaded:未加载数量,
Bytes:未加载占用空间,
Time:时间

-----jstat -compiler pid-----编译统计
Compiled:编译数量,
Invalid:不可用数量,
Time:时间,
FailedType:失败类型,
FailedMethod:失败的方法

-----jstat -gc pid -----垃圾回收统计
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-----jstat -gccapacity pid-----堆内存统计
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

jmap | 查看内存使用情况与生成heapdump

监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;

系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等

jmap -heap pid | 打印heap空间的概要,这里可以粗略的检验heap空间的使用情况。
jmap -histo pid | 这里会生成一个类的统计报表,此表简单无比,如显示什么类有多少个实例,共占了多少字节等。

这里写图片描述
这里写图片描述

jinfo | jdk自带的一个工具,它可以用来查看正在运行的java应用程序的扩展参数(JVM中-X标示的参数);甚至支持在运行时修改部分参数。

观察进程运行环境参数,包括Java System属性和JVM命令行参数

系统崩溃了?jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。

jinfo -flags pid | 查看jvm的参数
jinfo -sysprops pid| 查看java系统参数

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/ysk_xh_521/article/details/81232739