V共享测者的性能测试手册:JVM的监控利器

Posted VIPTEST

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了V共享测者的性能测试手册:JVM的监控利器相关的知识,希望对你有一定的参考价值。


每次聊起性能测试,最后的终结话题就是怎么做优化。其实在Java的复杂项目中都会有内存不足问题、内存泄露问题、线程死锁问题、CPU问题。这些问题功能测试或者是小压力的情况下有可能并不明显,很容易被忽视。但是到了生产环境,问题就暴露了,各种非功能bug会让你头疼不已。

今天,测者就把自己针对JVM监控、分析常用的工具总结一下,希望对你也有用。

jstat

jstat是JVM统计监测工具,主要用来监视java虚拟机的各种运行状态的工具。通过他可以监控虚拟机中class的装载、内存状况、GC、以及jit编译等很多运行时数据,是一个定位运行时过程的jvm性能重要工具。

 
   
   
 
  1. jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]


  2. generalOption - 单个的常用的命令行选项,如-help, -options, 或 -version。


  3. outputOptions -一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。


参数 作用 备注
class 用于查看类加载情况的统计 jstat -class pid:显示加载class的数量,及所占空间等信息。
compiler 查看HotSpot中即时编译器编译情况的统计 jstat -compiler pid:显示VM实时编译的数量等信息。
gccapacity 查看新生代、老生代及持久代的存储容量情况 jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
gccause 查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因。 jstat -gccause:显示gc原因
gcnew 查看新生代垃圾收集的情况 jstat -gcnew pid:new对象的信息
gcnewcapacity 用于查看新生代的存储容量情况 jstat -gcnewcapacity pid:new对象的信息及其占用量
gcold 用于查看老生代及持久代发生GC的情况 jstat -gcold pid:old对象的信息
gcoldcapacity 用于查看老生代的容量 jstat -gcoldcapacity pid:old对象的信息及其占用量
gcpermcapacity 用于查看持久代的容量 jstat -gcpermcapacity pid: perm对象的信息及其占用量
gcutil 查看新生代、老生代及持代垃圾收集的情况 jstat -util pid:统计gc信息统计
printcompilation HotSpot编译方法的统计 jstat -printcompilation pid:当前VM执行的信息


jmap

jmap是java内存映射工具,jmap用于生成堆转储快照(heapdump文件或者dump文件),打印出制定java进程的内存情况。除了可以获取dump文件,还可以查询finalize执行队列以及JVM的堆和永久代的详细信息。

 
   
   
 
  1. jmap [ option ] pid

  2. jmap [ option ] executable core

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

其中,参数如下(如果运行在64位JVM上,可能需要指定-J-d64命令选项参数):

 
   
   
 
  1. -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.


  2. -finalizerinfo 打印正等候回收的对象的信息.


  3. -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.


  4. -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.



  5. -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.


  6. -h | -help 打印辅助信息


  7. -J 传递参数给jmap启动的jvm.

jstack

jstack 可以针对当前java进程状态生产快照。该快照是当前Java虚拟机中每一条进程正在执行的方法堆栈的记录。是快速定位线程出现死锁、死循环、外部资源等待等长时间停止状态问题的很好的方法。

 
   
   
 
  1. jstack [ option ] pid

  2. jstack [ option ] executable core

  3. jstack [ option ] [server-id@]remote-hostname-or-IP

参数如下:

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


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


  3. -m打印java和native c/c++框架的所有栈信息.


  4. -h | -help打印帮助信息


  5. pid 需要被打印配置信息的java进程id,可以用jps查询.

jps

jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

 
   
   
 
  1. jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。参数如下:

 
   
   
 
  1. -q 不输出类名、Jar名和传入main方法的参数


  2. - l 输出main类或Jar的全限名


  3. -m 输出传入main方法的参数


  4. - v 输出传入JVM的参数

jinfo

jinfo可以获取java配置信息,比如:获取一些当前进程的jvm运行和启动信息等。命令格式:

 
   
   
 
  1. jinfo[option] pid

参数如下:

 
   
   
 
  1. -flag name 输出对应名称的参数

  2. -flag [+|-]name 开启或者关闭对应名称的参数

  3. -flag name=value 设定对应名称的参数

  4. -flags 输出全部的参数

  5. -sysprops 输出系统属性




 

VIPTEST

公益之路,持续前行!


以上是关于V共享测者的性能测试手册:JVM的监控利器的主要内容,如果未能解决你的问题,请参考以下文章

测者的性能测试手册:Web压力测试工具webbench

测者的性能测试手册:Web压力测试工具webbench

测者的测试技术手册:AI的自动化单元测试

测者的测试技术手册:揭开java method的一个秘密--巨型函数

JMH - Java 代码性能测试的终极利器必须掌握

JMH - Java 代码性能测试的终极利器必须掌握(务必收藏)!