jvm性能监控与问题分析工具

    工欲善其事,必先利其器。工具的本身还是底层命令的实现,没什么神奇的地方,只是对命令的封装图形化展示让我们使用更加高效和直观。

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
 
 
水滴石穿,积少成多。学习笔记,内容简单,用于复习,梳理巩固。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值