一、jps
jps -v 【输出进程启动参数】
- [root@VM-8-2-centos ~]# jps -v
- 12401 Jps -Dapplication.home=/usr/local/jdk1.8.0_241 -Xms8m
- 16964 jar
其他参考
Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客
二、jstat
jstat -gc 【vmid】 【查看Java堆的状态】
- [root@VM-8-2-centos dian-xhf]# jstat -gc 16964
- S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
- 12288.0 8192.0 0.0 0.0 147968.0 26136.3 55808.0 25116.2 59136.0 56068.7 7680.0 7058.2 15 0.223 3 0.341 0.564
jstat -gcutil 【vmid】 【查看Java堆占用百分比】
- [root@VM-8-2-centos dian-xhf]# jstat -gcutil 16964
- S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
- 0.00 0.00 17.66 45.00 94.81 91.90 15 0.223 3 0.341 0.564
S0 幸存0区域
S1 幸存1区域
E 伊甸园区
O 老年区
M 元空间 【有可能是P,表示永久代。具体的和jdk版本有关,笔者jdk版本是8】
YGC 年轻代的GC,也就是Minor GC ,轻量GC ,次数15
YGCT 轻量GC所耗时间 0.223秒
FGC 重量级GC次数 3
FGCT 重量级GC所耗时间 0.341秒
GCT 所有GC所耗费时间 0.564秒
三、jmap
打印 Java 堆概要信息,包括使用的 GC 算法、堆配置参数和各代中堆内存使用情况;
- > jmap -heap 10352
-
- jmap -heap 10352
- Attaching to process ID 10352, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 25.201-b09
-
- using thread-local object allocation.
- Parallel GC with 4 thread(s)
-
- Heap Configuration:
- //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(defalut 40)
- MinHeapFreeRatio = 0
- //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
- MaxHeapFreeRatio = 100
- //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
- MaxHeapSize = 4280287232 (4082.0MB)
- //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
- NewSize = 89128960 (85.0MB)
- //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
- MaxNewSize = 1426587648 (1360.5MB)
- //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老年代’的大小
- OldSize = 179306496 (171.0MB)
- //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
- NewRatio = 2
- //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
- SurvivorRatio = 8
- //对应jvm启动参数-XX:MetaspaceSize=<value>:设置JVM堆的‘元空间’的初始大小
- // jdk1.8 永久代已经被元空间所取代
- MetaspaceSize = 21807104 (20.796875MB)
- CompressedClassSpaceSize = 1073741824 (1024.0MB)
- //对应jvm启动参数-XX:MaxMetaspaceSize= :设置JVM堆的‘元空间’的最大大小
- MaxMetaspaceSize = 17592186044415 MB
- G1HeapRegionSize = 0 (0.0MB)
- //堆内存分布
- Heap Usage:
- //新生代的内存分布
- PS Young Generation
- //Eden区内存分布
- Eden Space:
- //Eden区总容量
- capacity = 1425539072 (1359.5MB)
- //Eden区已使用
- used = 28510792 (27.19001007080078MB)
- //Eden区剩余容量
- free = 1397028280 (1332.3099899291992MB)
- //Eden区使用比率
- 2.0000007407724003% used
- From Space:
- capacity = 524288 (0.5MB)
- used = 65536 (0.0625MB)
- free = 458752 (0.4375MB)
- 12.5% used
- To Space:
- capacity = 524288 (0.5MB)
- used = 0 (0.0MB)
- free = 524288 (0.5MB)
- 0.0% used
- PS Old Generation
- capacity = 128974848 (123.0MB)
- used = 24006808 (22.894676208496094MB)
- free = 104968040 (100.1053237915039MB)
- 18.613557893086256% used
-
- 13410 interned Strings occupying 1194568 bytes.
打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;
- >jmap -histo 10352
-
- num #instances #bytes class name
- ----------------------------------------------
- 1: 27073797 433180752 java.lang.Integer
- 2: 5442 16503144 [I
- 3: 5005 6143944 [B
- 4: 33835 3446608 [C
- 5: 9721 855448 java.lang.reflect.Method
- 6: 33751 810024 java.lang.String
- 7: 6494 717416 java.lang.Class
- 8: 14303 457696 java.util.concurrent.ConcurrentHashMap$Node
- ...
打印 Java 堆中对象直方图,通过该图可以获取每个 class 的对象数目,占用内存大小和类全名信息,带上 :live,则只统计活着的对象;统计 heap 中所有生存的对象的情况, 这个命令会先触发 gc 再统计:
- > jmap -histo:live 10352
-
- num #instances #bytes class name
- ----------------------------------------------
- 1: 27483 2670608 [C
- 2: 6453 713152 java.lang.Class
- 3: 27300 655200 java.lang.String
- 4: 12861 411552 java.util.concurrent.ConcurrentHashMap$Node
- 5: 6364 327688 [Ljava.lang.Object;
- 6: 2496 219648 java.lang.reflect.Method
- 7: 874 178440 [B
- ...
以 hprof 二进制格式将 Java 堆信息输出到文件内,该文件可以用 JProfiler、VisualVM 或 jhat 等工具查看;
四、jstack
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照。
Java八股文必看,入门到深入理解jvm虚拟机之基础故障指令【jps,jstate...】-CSDN博客
分析工具jprofiler