JVM监控

267 阅读2分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

命令工具

jps

查看操作系统运行的java进程 第一个数字表示进程运行的pid image.png

jstack

查看java进程中的线程堆栈,执行命令jstack 1 |less

image.png

jstack可以查看线程堆栈、线程状态。通常用来排查这两个bug:

  1. java进程CPU过高: 当CPU过高时我们需要知道哪个线程在执行什么导致CPU过高
  2. Java线程死锁: jstack可以查看线程的状态以及等待的锁信息,死锁的产生通常是由于代码引起的

jmap

用法: jmap option pid

option选项值有:

选项含义
-dump生成java堆转储文件,用法 jmap -dump:[live,]format=b,file=<filename>,带上live参数表名会立即进行一次full gc,如此一来文件里面都是存活的对象。使用案例
-finalizerinfo查看在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux、solaris平台有效
-heap查看java堆的信息,如使用的垃圾回收器、垃圾回收参数配置、新生代老年代信息大小多少
-histo查看堆中对象的统计信息,如类、实例数量、合计容量
-F当虚拟机进程对-dump选项没有响应时,可以使用该选项强制生成dump快照

使用例子: jmap -histo 1 通常业务系统都是char、map类型占用多 image.png jmap -dump:live,format=b,file=jmapDump 1 注意live会进行一次full gc

jstat

查看java进程gc情况,如次数,耗时信息 用法: jstat option pid [interval(s|ms) [count]] interval表示间隔几秒刷新一次,count表示刷新多少次

option选项

e676b200679a41ec830d977cbdca9a4e_tplv-k3u1fbpfcp-watermark.awebp

比如查看gc情况 jstat -gc 1 50ms 5

image.png

可以看到FGC次数不为0,因为刚刚执行了jmap -dump命令

图形化工具

图形化工具有 JConsole、visualVM、jprofile。下面试用下visualVMware。

可视化监控

JVM监控能够更方便我们定位问题排查问题。常用到的监控指标有:

  • 机器CPU
  • 机器内存
  • 机器网络IO
  • 机器磁盘IO
  • JVM堆空间(old,eden,s1/s2,code cache,metaspace,class compressed class space)
  • 类加载数量
  • 线程数
  • gc数和gc耗时

可以看到上面不仅仅有jvm监控指标还有机器指标,机器指标可以帮助排查对外的问题。

image.png

image.png

image.png