jps 看java进程
语法
jps[options] [hostid]
options参数
-
-q :仅仅显示LVMID (local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等
-
-1:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
-
-m:输出虚拟机进程启动时传递给主类main()的参数
-
-v:列串虚拟机进程启动时的JVM参数。比如: -Xms20m-Xmx50m是启动程序指定的jvm参数。
说明:以上参数可以综合使用。
补充:
如果某Java进程关闭了默认开启的UsePerfData参数(即使用参数-XX:-UsePerfData) ,那么jps命令(以及下面介绍的jstat)将无法探知该Java进程。
jstat 统计监测JVM的gc信息
jstat(JVM Statistics Monitoring Tool): 用户监视虚拟机各种运行状态信息的命令行工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行的数据。
常用于检测垃圾回收以及内存泄漏问题。
语法:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option:行为
vmid:进程id
interval:用于指定输出统计数据的周期,单位为毫秒。即时间间隔。单位:毫秒
count:用于指定查询的总次数。
-t:可以输出信息前加上一个Timestamp列,显示程序运行时间。单位:秒。
-h:可以在周期性数据输出时,输出多少行数据后输出一个表头信息。
options
类装载相关:
- -class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等
垃圾回收相关的:.
- -gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、,用空间、GC时间合计等信息。
- -gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
- gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。
- -gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。
- -gcnew:显示新生代GC状况-
- gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
- -geold:显示老年代GC状况
重点使用介绍:
jstat -class
jstat option vmid 默认 count 为1
root@server:~# jstat -class 8533
Loaded Bytes Unloaded Bytes Time
6646 11821.1 0 0.0 12.75
装载个数 字节数 卸载个数 字节数 使用时间
jstat option vmid interval
root@server:~# jstat -class 8533 1000
Loaded Bytes Unloaded Bytes Time
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
jstat option vmid interval count
root@server:~# jstat -class 8533 1000 10
Loaded Bytes Unloaded Bytes Time
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
6703 11911.1 0 0.0 12.77
root@server:~# jstat -class -t 8533
Timestamp Loaded Bytes Unloaded Bytes Time
590.7 6703 11911.1 0 0.0 12.77
程序从开始执行到现在一共多少秒 590.7 s
jstat option -h vmid interval count
root@server:~# jstat -class -t -h3 8533 1000 10
Timestamp Loaded Bytes Unloaded Bytes Time
738.0 6703 11911.1 0 0.0 12.77
739.0 6703 11911.1 0 0.0 12.77
740.0 6703 11911.1 0 0.0 12.77
Timestamp Loaded Bytes Unloaded Bytes Time
741.0 6703 11911.1 0 0.0 12.77
742.0 6703 11911.1 0 0.0 12.77
743.0 6703 11911.1 0 0.0 12.77
Timestamp Loaded Bytes Unloaded Bytes Time
744.0 6703 11911.1 0 0.0 12.77
745.0 6703 11911.1 0 0.0 12.77
746.0 6703 11911.1 0 0.0 12.77
Timestamp Loaded Bytes Unloaded Bytes Time
747.0 6703 11911.1 0 0.0 12.77
-h3 每隔3行输出一次表头
jstat -gc
root@server:~# jstat -gc 8533
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
10240.0 8192.0 0.0 0.0 249856.0 11848.7 35840.0 13983.8 36048.0 33375.8 4864.0 4371.3 9 1.776 2 0.312 2.088
root@server:~# jstat -gccause 8533 1000 10 gc的原因(这里是元空间)
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
0.00 0.00 4.74 39.02 92.59 89.87 9 1.776 2 0.312 2.088 Metadata GC Threshold No GC
单位:kb
列说明
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间 FGC时间+YGC时间
经验
可以通过比较进程的启动时间(Timestamp)和GC时间(GCT列),或者两次测量的间隔时间和总GC时间的增量,来得出GC时间占运行时间的比例。
如果该比例超过20%,则说明目前堆的压力比较大,如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。
jinfo 实时查看和修改 JVM 配置参数值
jinfo(Configuralion Info for Java) : 查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数。
长汀论坛在很多情况下,Java 应用程序不会指定所有的 Java 虚拟机参数。而此时,开发人员可能不知道某一个具体的 Java 虚拟机参数的默认值。
在这种情况下,可能需要通过查找文档获取某个参数的默认值。这个查找过程可能是非常艰难的。但有了 jinfo 工具,开发人