JVM命令详解

823 阅读3分钟

JVM调优工具详解|8月更文挑战

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

前言: 前面主要讲解了常用的几种垃圾收集器,如有不了解的,点击 JVM垃圾回收器详解(上)-CMS收集器| 8月更文挑战# JVM垃圾回收器详解(下)-G1收集器| 8月更文挑战前往了解,既然已经理论了解的差不多了,那么也该开始了解下JVM相关的命令了.

jps

首先启动一些自己的java服务,然后可以在命令行通过jps命令查看当前运行的java服务进程,拿到对应的进程ID

image.png

Jmap

jmap可以查看对应java进程的堆内存情况,如实例个数以及占用内存大小

  • jmap -histo 52432

image.png

  • num:序号

  • instances:实例数量

  • bytes:占用空间大小

  • class name:类名称,几个特殊的类名称解释,C,B,I,[C -> char[],[S ->short[],[I ->int[],[B -> byte[]

  • jamp -heap 进程id 查看当前堆的情况

image.png

  • Eden Space 伊甸区
  • From Space From区
  • To Space To区
  • Old Generation 老年代
  • capatity 总大小
  • used 已使用内存
  • free 可用内存

Jstack

jstack + 进程ID 可以用来查找程序中的线程状况,因此如果有死锁的情况可以用jstack来查询

image.png 由上图可以看到线程状态,BLOCKED,上下两个线程同时持有对方的锁,因此死锁,可以根据定位到是DeadLockTest.java的21行

Jinfo

  • jinfo -flags 线程ID 查看程序当前JVM参数

image.png

  • jinfo -sysprops 线程ID 查看java系统参数

Jstat

jstat是用的比较多的命令

  1. jstat -gc pid 可以查看GC情况

image.png

  • S0C:第一个幸存区的大小,单位KB

  • S1C:第二个幸存区的大小

  • S0U:第一个幸存区的使用大小S1U:第二个幸存区的使用大小

  • EC:伊甸园区的大小

  • EU:伊甸园区的使用大小

  • OC:老年代大小

  • OU:老年代使用大小

  • MC:方法区大小(元空间)

  • MU:方法区使用大小

  • CCSC:压缩类空间大小

  • CCSU:压缩类空间使用大小

  • YGC:年轻代垃圾回收次数

  • YGCT:年轻代垃圾回收消耗时间,单位s

  • FGC:老年代垃圾回收次数

  • FGCT:老年代垃圾回收消耗时间,单位s

  • GCT:垃圾回收消耗总时间,单位s 还有一些额外的命令总结一下:

  • jstat -gccapacity pid 堆内存统计

  • jstat -gcnew pid 新生代垃圾回收统计

  • jstat -gcnewcapacity pid 新生代内存统计

  • jstat -gcold pid 老年代垃圾回收统计

  • jstat -gcoldcpacity pid 老年代内存统计

  • jstat -gcmetacapatity pid 元数据空间统计

总结

以上的jvm中常用的一些命令,当然有些第三方工具可以帮我们已经封装好,可以让我们更简洁的了解到当前程序的一些状况,大家可以了解下阿里开源的Arthas,目前JVM就先告一段落。