JVM学习(三) 性能检测工具-JDK命令行工具

内容来源于《深入理解Java虚拟机》-周志明

性能检测工具-JDK命令行工具

jps    虚拟机进程状况工具

命令格式:jps [options] [hostid]        options选项参数 hostid为RMI表中注册主机名
主要选项:
    -q  只输出LVMID(本地虚拟机唯一ID),省略主类的名称
    -m 输出虚拟机进程启动时传递给主类main() 函数的参数
    -l    输出主类的全名,如果进程执行的时Jar 包,输出Jar 路径
    -v   输出虚拟机进程启动时JVM参数
示例:
 
JVM学习(三) 性能检测工具-JDK命令行工具_第1张图片
 
 

jstat    虚拟机统计信息监视工具

用于监视虚拟机各种运行状态信息,它可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
命令格式:jstat [ option vmid [ interval [s|ms] [count] ]
命令中VMID与LVMID区别,如果是本地虚拟机进程,二者一致,如果是远程虚拟机进程,那VMID的格式:
 [protocol:] [//] lvmid[@hostname[:port]/servername]
参数interval 和 count 分别代表 查询间隔 和 次数,如果省略只查一次。假设需要每250毫秒查询一次进程为4884垃圾收集状况,一共查询20次,那命令为:
jstat -gc 4884 250 20
主要参数:
  • -class (类加载器) 
  • -compiler (JIT) 
  • -gc (GC堆状态) 
  • -gccapacity (各区大小) 
  • -gccause (最近一次GC统计和原因) 
  • -gcnew (新区统计)
  • -gcnewcapacity (新区大小)
  • -gcold (老区统计)
  • -gcoldcapacity (老区大小)
  • -gcpermcapacity (永久区大小)
  • -gcutil (GC统计汇总)
  • -printcompilation (HotSpot编译统计)

各参数结果解释可查看:  https://blog.csdn.net/u012998254/article/details/81045414

 

jinfo    Java配置信息工具

实时地查看和调整虚拟机各项参数
命令格式:jinfo [option] pid
主要参数:
    -flag name  查看系统参数
    -flag name=value 修改一部分运行期的系统虚拟机参数
    -flag [+|-] name    启动或禁用一部分运行期的虚拟机参数
    -flags   查看所有指定的参数
    -sysprops    显示应用程序属性
 

jmap    Java内存映像工具

用于生成堆转储快照(heapdump或dump文件),查询finalize 执行队列、Java堆等信息
命令格式:jmap [ option ] vmid
选项参数:
    no option  查看进程的内存映像信息
    -dump 生成Java转储快照。格式为:-dump:[live,]format=b,file=,其中live子参数说明是否只dump出存活的对象。
    -finalizerinfo 显示在F-Queue 中等待Finalizer 线程执行finalize 方法的对象。只有Linux/Solaris平台有效
    -heap 显示堆详细信息,如使用那种回收器、参数配置、分代状况等。只在Linux/Solaris平台有效
    -histo    显示堆中对象统计信息,包括类、实例数量、合计容量
    -F     当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.

其他生成dump文件的方式

    1. 参数 -XX:+HeapDumpOnOutOfMemoryError  可以让虚拟机在OOM异常出现之后自动生成dump文件。
    2. linux系统下 通过命令 Kill -3  发送进程退出信号"吓唬”一下虚拟机,可以拿到dump文件
案例
    jmap -dump:format=b,file=gcdemo.bin 10668
     JVM学习(三) 性能检测工具-JDK命令行工具_第2张图片
 
 

jhat    虚拟机堆转储快照分析工具

与jmap搭配使用,分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/HTML 服务器,生成dump 文件的分析结果后,可以在浏览器查看。不过一般不采用该工具查看,而是利用其它专业的工具:如Eclipse Memory Analyzer、IBM HeapAnalyzer 等
命令格式:jhat 文件路径
案例:
JVM学习(三) 性能检测工具-JDK命令行工具_第3张图片
 
 
访问 localhost:7000 查看
 
JVM学习(三) 性能检测工具-JDK命令行工具_第4张图片
 
 
 

jstack    Java堆栈跟踪工具

用于生成虚拟机当前时刻的线程快照(threaddump或javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的时定位线程出现长时间停顿的原因,如线程间锁死、死循环、请求外部资源导致的长时间等待等。
命令格式:jstack [ option ] vmid
可选参数:
    -F    当正常输出请求不被响应时,强制输出线程堆栈
    -l    除堆栈外,显示关于锁的附加信息
    -m    如果调用到本地方法的话,可以显示C/C++的堆栈。
 

HSDIS    JIT生成代码反汇编

HSDIS是一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件,他包含在HotSpot虚拟机的源码之中,但没有提供编译后的程序。在Project Kenai的网站也可以下载到单独的源码。他的作用是让HotSpot的-XX : +PrintAssembly指令调用他来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就可以通过输出的代码来分析问题。可以根据自己的操作系统和CPU类型从Project Kenai的网站上下载编译好的插件,直接放到JDK_HOME/jre/bin/client和JDK_HOME/jre/bin/server目录中即可。如果没有找到所需操作系统(譬如Windows的就没有)的成品,那就得自己使用源码编译一下。
        还需要注意的是,如果使用的是Debug或者FastDebug版的HotSpot,那可以直接通过-XX : +PringAssembly指令使用插件;如果使用的是Product版的HotSpot,那还要额外加入一个-XX : +UnlockDiagnosticVMOption参数。
        

你可能感兴趣的:(java,jvm命令,jvm性能检测)