目录
1、jstat命令
1.1、查看class加载统计
1.2、查看编译统计
1.3、垃圾回收统计
2、jmap命令
2.1、查看内存使用情况 jmap -heap 262968
2.2、查看内存中对象数量及大小
2.3、将内存使用情况dump到文件中
2.4、通过jhat对dump文件进行分析
2.5、通过MAT工具对dump文件进行分析
3、jstack命令
4、jdk自带jvisualvm工具
5、gc日志分析工具gceasy
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
1.1、查看class加载统计
E:IDEAWorkSpacezsy-teacher-server>jps -l 455796 org.jetbrains.idea.maven.server.RemoteMavenServer 212432 468948 sun.tools.jps.Jps 262968 com.zhixinhuixue.teacher.academic.ZSYAcademicApplication 328040 org.jetbrains.jps.cmdline.Launcher 380680 org.jetbrains.jps.cmdline.Launcher
E:IDEAWorkSpacezsy-teacher-server>jstat -class 262968 加载类数量 占用空间 未加载数量 未加载占用空间 时间 Loaded Bytes Unloaded Bytes Time 14647 26952.9 0 0.0 12.69
1.2、查看编译统计
E:IDEAWorkSpacezsy-teacher-server>jstat -compiler 262968 编译数量 失败数量 不可用数量 时间 失败类型 失败方法 Compiled Failed Invalid Time FailedType FailedMethod 9242 0 0 1.77 0
1.3、垃圾回收统计
每500ms统计一次gc情况,共执行200次。jstat -gc 262968 500 200
S0C:第一个Survivor区的大小(KB) S1C:第二个Survivor区的大小(KB) S0U:第一个Survivor区的使用大小(KB) S1U:第二个Survivor区的使用大小(KB) EC:Eden区的大小(KB) EU:Eden区的使用大小(KB) OC:Old区大小(KB) OU:Old使用大小(KB) MC:方法区大小(KB) MU:方法区使用大小(KB) CCSC:压缩类空间大小(KB) CCSU:压缩类空间使用大小(KB) YGC:年轻代垃圾回收次数 YGCT:年轻代垃圾回收消耗时间 FGC:老年代垃圾回收次数 FGCT:老年代垃圾回收消耗时间 GCT:垃圾回收消耗总时间
jmap可以进行内存使用情况的汇总,并对内存的溢出进行定位与分析。
2.1、查看内存使用情况 jmap -heap 262968
2.2、查看内存中对象数量及大小
jmap -histo 262968 | more 查看所有对象,包括活跃与非活跃
jmap -histo:live 262968 | more 查看活跃对象
对象说明:B byteC charD doubleF floatI intJ longZ boolean[ 数组,如 [I 表示 int[][L + 类名 其他对象
2.3、将内存使用情况dump到文件中
- 手动导出dump文件:jmap -dump:live,format=b,file=dump.hprof PID / jmap -dump:format=b,file=dump.dat PID
- 自动导出dump文件(当jvm堆内存溢出时):-XX:+HeapDumponOutOfMemoryError -XX:HeapDumpPath=/home/temp/dump.hprof
2.4、通过jhat对dump文件进行分析
2.5、通过MAT工具对dump文件进行分析
若dump文件过大,可以加大-Xmx
参考https://www.cnblogs.com/liangzs/p/8489321.html
用法:jstack <pid>
VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。 VisualVM使用简单,几乎0配置,功能还是比较丰富的,几乎囊括了其它JDK自带命令的所有功能。
- 内存信息
- 线程信息
- Dump堆(本地进程)
- Dump线程(本地进程)
- 打开堆Dump。堆Dump可以用jmap来生成。
- 打开线程Dump
- 生成应用快照(包含内存信息、线程信息等等)
- 性能分析。CPU分析(各个方法调用时间,检查哪些方法耗时多),内存分析(各类对象占用的内存,检查哪些类占用内存多)
https://www.gceasy.io/