目录
1.1、JPS(JVM Process Status Tool)
1.2、jstat (JVM Statistics Monitoring Tool)
1.3、jinfo. (jvm Configuration Info for java)
1.4、jmap (JVM Memeory Map for java)
1.5、jstack (Stack Trace for Java)
1.6、jhat (Java Heap Dump for java )
2.3、MAT (Memory Analyize Tools)
前言
工欲善其事,必先利其器。工具的本身还是底层命令的实现,没什么神奇的地方,只是对命令的封装图形化展示让我们使用更加高效和直观。
1、命令行工具
jdk为开发者提供了一系列的问题排查分析工具,比较实用。
1.1、JPS(JVM Process Status Tool)
通过JPS可以查看系统内java进程的pid,定位java线程。
-q:只输出进程 ID
-m:输出传入 main 方法的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数
1.2、jstat (JVM Statistics Monitoring Tool)
用于收集hotspot虚拟机的性能统计数据,例如间隔100ms输出一次gc的详细信息。
作用:
-
查看gc的详细信息;
-
各个代的gc信息;
jstat -gc 7972 200 10 //gc情况 没200ms输出一次,输出10次;
jstat -gcnew 7972 200 10 //gc年轻代
jstat -gcold 7972 200 10 //gc老年代
jstat -gccause 772 200 10 //gc的原因
实例操作如下:
jstat结果分析:
- S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
- S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
- S0U :年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
- S1U :年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
- EC :年轻代中Eden(伊甸园)的容量 (字节)
- EU :年轻代中Eden(伊甸园)目前已使用空间 (字节)
- OC :Old代的容量 (字节)
- OU :Old代目前已使用空间 (字节)
- MC:metaspace(元空间)的容量 (字节)
- MU:metaspace(元空间)目前已使用空间 (字节)
- YGC :从应用程序启动到采样时年轻代中gc次数
- YGCT :从应用程序启动到采样时年轻代中gc所用时间(s)
- FGC :从应用程序启动到采样时old代(全gc)gc次数
- FGCT :从应用程序启动到采样时old代(全gc)gc所用时间(s)
- GCT:从应用程序启动到采样时gc用的总时间(s)
1.3、jinfo. (jvm Configuration Info for java)
实时查看和调整jvm的参数,动态的增加修改jvm的参数,但是不是所有的都可以,只能在printflagsfinal后显示managebale后才OK;
作用:
-
查看项目中jvm参数;
-
修改jvm参数值;
jps -l //打印所有的java进程id;
jinfo -flags 2716 //查看所有曾经赋过值的参数;
jinfo -flag UseG1GC 2716; //查看是否使用了G1垃圾收集器
jinfo -flag MaxHeapSize 2716 //查看最大堆内存大小;
jinfo -flags MaxHeapSize= 102400 2716 //修改:只有参数是manageable修饰的参数才可以修改;
jinfo -flag +PrintGCDetails 7972
jinfo -flags pid //打印出当前进程的所有的参数
Java -XX:+PrintFlagsFinal -version //打印出虚拟机的java所有的配置的参数
1.4、jmap (JVM Memeory Map for java)
查看堆内存的详情信息,主要是在发生OOM,或者发现有此趋势,内存在不断的上升,可以通过此命令来查看分析堆文件,找出内存泄漏的地方。
jmap -heap 8123 //堆的信息
jmap -dump:live,format=b,file=heap.bin 1234 //生成堆的转储文件
其实很少手动dump,可以通过 - XX:+HeapDumpOnOutOfMemeoryError 打印出堆快照文件,只有在发生OOM的时候才生成dump文件,这时候分析dump文件,得到是什么占用了jvm的堆内存导致了OOM,最终的目的是排查问题。
1.5、jstack (Stack Trace for Java)
主要用来跟踪java进程中的线程的执行状态,比较重要。
jstack pid; //可以打印出进程中线程的栈,及状态;
先查看cpu使用率高
作用:
-
线程发生问题-死锁;
-
线程状态;
线上fastthreadio工具查看分析:
https://fastthread.io/
1.6、jhat (Java Heap Dump for java )
也可以分析堆的转储文件,但是文件比较大,占用资源。
2、图形工具
2.1、Jconsole
JConsole工具是JDK自带的可视化监控工具,查看java应用程序的运行概况、监控堆信息、永久区使用 情况、类加载情况等。
2.2、jvisualVM
多合一故障处理工具,集成了很多的功能,其实就是以上的命令的集成图像化,用起来比较方便。
从这里也可以清楚的看到jvm的分代内存布局。
2.3、MAT (Memory Analyize Tools)
工具可以分析堆泄漏文件-
LeakCanary,可以自动分析,给出一个可能泄漏的内存报告,提高问题查找效率。
堆转储文件在线分析工具:
perfume
内存泄露分析一览:
3、小结
磨刀不误砍柴工,掌握好工具可以使我们更高效的应对和解决问题。
名称
|
作用
|
分析工具—(在线的要注意安全性问题)
|
jps
|
查看java
进程
|
|
jstat
|
查看
gc
的详细信息
|
|
jinfo
|
查看和修改jvm的配置参数
信息
|
|
jmap
|
dump内存
文件:
jmap -dump:format=b, file=heap.txt pid
|
本地mat/
perfma笨马/(mat可以生成内存报告/查看gcroots)
|
jstack
|
java
线程
栈的信息,死锁
|
在线查看工具:fastthreadio
|
jconsole
|
java
监视和管理控制台 treadmanage管理工具;
|
|
jvisualVM
|
多合一
故障处理工具
|
|
gc
|
+XX:GCdetails/停顿时间 + 吞吐量
|
本地查看工具:gcviewer
在线查看工具:Greasy
|
水滴石穿,积少成多。学习笔记,内容简单,用于复习,梳理巩固。