JDK 内置命令行工具
jvm命令行工具
JPS:
- 在Linux系统或Mac上,无法看到全局所有的Java进程(需要使用sudo切换到root用户查看)
- 只能看到JPS当前版本运行的Java进程
jstat-查看JVM内部堆内存使用情况
jstat -gcutil -t pid 1000 1000
//查看对应pid的Java进程的GC情况
TimeStamp | S0 | S1 | E | O | M | CCS | YGC | YGCT | FGC | FGCT | GCT |
---|---|---|---|---|---|---|---|---|---|---|---|
663.0 | 0.00 | 99.93 | 6.32 | 23.92 | 94.75 | 93.16 | 11 | 0.118 | 3 | 0.226 | 0.344 |
-t
选项的位置是固定的,不能在前也不能在后,可以看出是用于显示时间戳,即对应的JVM线程启动到现在的秒数
TimeStamp
JVM启动的时间,大约10分钟S0
0号存活区的百分比使用率,0%代表当前空置的存活区为S0S1
1号存活区的百分比使用率E
Eden区,新生代的百分比使用率O
Old区,老年代百分比使用率M
Meta区,元数据区百分比使用率CCS
压缩class空间(Compressed class space)的百分比使用率YGC
Young GC的次数,11次YGCT
Young GC的总时间,0.118秒,占用总运行时间不多,可以忽略FGC
FullGc的次数,只发生了3次,问题不大FGCT
FullGc的时间,平均每次80ms左右,考虑优化GCT
所有GC加起来消耗的总时间,即YGCT + FGCT
jstat -gc -t pid 1000 1000
//查看对应pid的Java进程的GC情况
S0C | S1C | S0U | S1U | EC | EU | OC | OU | MC | MU | CCSC | CCSU | YGC | YGCT | FGC | FGCT | GCT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
26624.0 | 21504.0 | 0.0 | 21489.8 | 438784.0 | 18726.5 | 163840.0 | 39192.5 | 77056.0 | 73010.4 | 10752.0 | 10017.1 | 11 | 0.118 | 3 | 0.226 | 0.344 |
-t
选项的位置是固定的,不能在前也不能在后,可以看出是用于显示时间戳,即对应的JVM线程启动到现在的秒数
TimeStamp
JVM启动的时间,大约10分钟S0C
0号存活区的总空间,单位kbS0U
0号存活区已使用的内存大小S1C
1号存活区的总空间,单位kbS1U
1号存活区已使用的内存大小EC
Eden区,新生代的总空间,单位kbEU
Eden区,新生代已使用的内存大小OC
Old区,老年代的总空间,单位kbOU
Old区,老年代已使用的内存大小MC
Meta区,元数据区的总空间,单位kbMU
Meta区,元数据区已使用的内存大小CCSC
压缩class空间(Compressed class space)的总空间,单位kbCCSU
压缩class空间(Compressed class space)已使用的内存大小
YGC
YGCT
FGC
FGCT
GCT
等信息与-gcutil
中相同,不再赘述
jmap *
# 打印堆内存(/内存池)的配置和使用信息
jmap -heap pid
#查看哪些类占用的空间最多,直方图
jmap -histo pid
#Dump堆内存快照
jmap -dump:format=b,file=3826.hprof=3826
jstack
#
jstack -l pid
-F
强制执行 thread dump,可在 Java 进程卡死(hung 住)时使用,此选项可能需要系统权限。
-m
混合模式(mixed mode),将 Java 帧和native 帧一起输出,此选项可能需要系统权限。
-l
长列表模式,将线程相关的 locks 信息一起输出,比如持有的锁,等待的锁。
jcmd
jcmd
综合了前面的几个命令
示例:
# 查看jvm版本
jcmd pid VM.version
#
jcmd pid VM.flags
#
jcmd pid VM.command_line
#
jcmd pid VM.system_properties
# 查看线程相关信息
jcmd pid Thread.print
# 查看gc信息,相当于 jmap -histo pid
jcmd pid GC.class_histogram
#
jcmd pid GC.heap_info
jrunscript/jjs
- jrunscript:执行js代码,或者js文件
- jjs:开启js的shell进程