JDK自带的JVM工具

目录

      • jdk自带jvm工具
        • jps
        • jstat
        • jinfo
        • jmap
        • jstack
        • jconsole(GUI)
        • VisualVM(GUI)
      • 内存泄漏

 

虚拟机工具可以分析jvm运行时数据、定位jvm存在的问题。这些工具在jdk的bin目录下,前面的均只作为了解,实际只使用最后2个。
 

jdk自带jvm工具

jps

查看jvm进程、jvm参数

#查看正在执行的虚拟机进程,和ps -ef|grep java相似,也可以使用ps -ef | grep xxx代替
#会输出pid,主类显示全限定类名,如果执行的是jar则显示jar的路径
jps -l 

#查看jvm参数
jps -v  

 

jstat

查看jvm的运行状态,主要用于定位jvm性能问题

#pid、间隔多少ms输出1次、输出次数。缺省输出次数时,默认一直输出
jstat -gc 16340 1000 10

JDK自带的JVM工具_第1张图片

  • S0C、S1C:第一个、第二个Survivor区的容量(from、to),S是Survivor、C是Capacity
  • S0U、S1U:第一个、第二个Survivor区已使用的容量,U是used
  • EC、 EU:Eden区的容量、已用容量
  • OC、OU:老年代的容量、已用容量,O是old
  • MC、MU:方法区的
  • CCSC、CCSU:压缩的类空间的
  • YGC、YGCT:新生代垃圾回收次数、消耗时间,Y是young,GC就是gc,T是time
  • FGC、FGCT:老年代的,FGC是Full GC 老年代GC
  • GCT:垃圾回收消耗总时间

 

jinfo

查看jvm参数

#查看指定进程(pid)的信息,包括操作系统的信息、环境变量、jvm参数等
jinfo 16340

#查看指定进程的全部jvm参数
jinfo -flags 16340

#查看指定进程的指定jvm参数,也可以通过grep过滤得到
jinfo -flag MaxHeapSize 16340

 

jmap

用于分析堆的情况、生成堆转储快照(副本)

#查看堆的使用情况,包括最大|小堆内存、各年代的使用情况
jmap -heap 28180 

# 查看所有的类的实例,包括类名、实例个数、每个实例的大小
# 部分类名会简写,比如B=>byte,C=>char,I=>int
jmap -histo 28180
# 信息很多,可以使用管道命令分页查看
jmap -histo 28180 | more

# 生成堆快照文件,文件后缀是.bin,windows路径用\,linux用/
jmap -dump:format=b,file=D:\mall.bin 28180  #pid
jmap -dump:format=b,file=/usr/local/mall.bin 28180
#jvm参数,发生OOM异常时自动生成dump文件,可用于系统复盘(恢复)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\mall\

 

jstack

用于查看线程快照。线程快照可以定位线程出现长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致的长时间等待等

#查看线程快照,包括线程名、线程状态、执行到那个类的哪一行代码
jstack -l 28584  #pid

#只检查线程死锁
jstack -m 28584  #pid

eg. 线程死锁时的线程快照:
JDK自带的JVM工具_第2张图片
会列出发生死锁的线程,死锁原因、代码位置

 

jconsole(GUI)

jvm的关注点有2块:内存(堆)、线程,jconsole集成了线程与内存的可视化实时展示,可以连接本地、远程,可以展示各年代的情况,可以检测线程死锁,十分强大

jconsole

 

VisualVM(GUI)

jconsole很强大,但还是要到命令行去敲命令 ,jvisualvm也是jdk自带的,常搭配IDEA插件使用,和jconsole一样强大,但不需要到命令行敲命令,直接在IDEA中使用。

1、IDEA安装插件 VisualVM Launcher

2、在VisualVM Launcher中配置VisualVM的路径,即jdk/bin目录下的 jvisualvm

 

内存泄漏

  • 堆内存泄漏,常见现象:heap使用量明显上升、经常达到最大堆内存,出现OOM或频繁Full GC。解决方案:dump分析堆快照
  • 堆外内存泄漏:heap使用量很低、无明显变化,但出现OOM会频繁Full GC。解决方案:VisualVM -> 工具 -> 插件 -> 可用插件 -> 安装Btrace 进行分析

你可能感兴趣的:(JVM,jvm)