【JVM学习笔记】虚拟机工具及性能监测命令

JPS

java process status

jps -l 查看包名+类名

jps -m 查看类和接收的参数

jps -v 查看类+虚拟机参数

 

jstat

类装载,内存 ,垃圾收集,jit编译的信息

命令格式:jstat [options] VMID [interval] [count]

[options] : 操作参数,一般使用 -gcutil 查看gc情况

VMID : 本地虚拟机进程ID,即当前运行的java进程号

[interval] : 连续输出的时间间隔,单位为秒或者毫秒

[count] : 连续输出的次数,如果缺省打印无数次

 

Option Displays
class 类加载的行为统计。
compiler HotSpt JIT编译器行为统计。
gc 垃圾回收堆的行为统计。
gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。
gcutil 垃圾回收统计概述(百分比)。
gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。
gcnew 新生代行为统计。
gcnewcapacity 新生代与其相应的内存空间的统计。
gcold 年老代和永生代行为统计。
gcoldcapacity 年老代行为统计。
gcpermcapacity 永生代行为统计。
printcompilation HotSpot编译方法统计。

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

 

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。元空间和永久代最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。

 

jinfo

查看和调整虚拟机参数

如查看虚拟机是否使用G1垃圾收集器

+代表使用,-代表没使用

 

查看jvm的参数:jinfo -flags process_id

查看java系统参数:jinfo -sysprops process_id

如果需要关闭GC日志的打印,使用下面的命令:

jinfo -flag -PrintGC 27250 

jinfo -flag -PrintGCDetails 27250

查看是否开启了GC日志的打印:

jinfo -flag PrintGC 27250 

jinfo -flag PrintGCDetails 27250

 

 

jmap

JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。

命令格式

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [server-id@]remote-hostname-or-IP

参数

option:选项参数,不可同时使用多个选项参数

pid:java进程id,命令ps -ef | grep java获取

executable:产生核心dump的java可执行文件

core:需要打印配置信息的核心文件

remote-hostname-or-ip:远程调试的主机名或ip

server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器

 

options参数

heap : 显示Java堆详细信息

histo : 显示堆中对象的统计信息

permstat :Java堆内存的永久保存区域的类加载器的统计信息

finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象

dump : 生成堆转储快照

F : 当-dump没有响应时,强制生成dump快照

 

 

jhat

JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。

一般不用。

 

jstack

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

 

jstack [ option ] pid

基本参数:

-F 当jstack [-l] pid没有响应的时候强制打印栈信息

-l 长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m 打印java和native c/c++框架的所有栈信息. -h | -help打印帮助信息

pid 需要被打印配置信息的java进程id,可以用jps工具查询. [1] 

注意:

1、不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。

2、在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。

 

jconsole

内存监控

线程监控

死锁

 

VisualVM

一款功能丰富的虚拟机性能监测工具

 

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