jvm工具

JPS

jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。

记法 : jps 信号弱。 定位

-q:只输出进程 ID
-m:输出传入 main 方法的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数

  命令:jps
11216 Main
13760 MallAdminApplication
8340
13432 Jps
8184 Launcher
8924 RemoteMavenServer

JSTAT

jstat 工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。

显示加载class的数量,及所占空间等信息

jstat -class pid
image.png

显示VM实时编译的数量等信息。

jstat -compiler pid
image.png

可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat -gc pid

因为比较乱, 我们可以让他输出到其他位置 (第二个例子a.txt)


image.png
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
22528.0 1024.0  0.0   608.0  681984.0 131488.7  119296.0   35350.7   51712.0 48712.9 6912.0 6344.9     11    0.424   2      0.091    0.516


可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

jstat -gccapacity

如:PGCMN显示的是最小perm的内存使用量,
PGCMX显示的是perm的内存最大使用量,
PGC是当前新生成的perm内存占用量,
PC是当前perm内存占用量。
其他的可以根据这个类推, OC是old内纯的占用量。


![image.png](https://upload-images.jianshu.io/upload_images/7925105-b2e996f88f01584e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同上

NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87040.0 1391616.0 1006592.0 22528.0 1024.0 681984.0 175104.0 2784256.0 119296.0 119296.0 0.0 1093632.0 51712.0 0.0 1048576.0 6912.0 11 2

 
jstat -gcnew pid:new对象的信息。 
jstat -gcnewcapacity pid:new对象的信息及其占用量。 
jstat -gcold pid:old对象的信息。 
jstat -gcoldcapacity pid:old对象的信息及其占用量。 
jstat -gcpermcapacity pid: perm对象的信息及其占用量。 
jstat -util pid:统计gc信息统计。 
jstat -printcompilation pid:当前VM执行的信息。 
jstat -gcutil  pid  1000 100  : 1000ms统计一次gc情况统计100次;

除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。