性能测试必备监控技能jvm之jdk命令行工具篇16
前言
对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈
jps
JVM Process Status Tool的缩写,JVM进程状况工具。
主要功能: 列出正在运行的java进程,并显示执行主类的名称及进程在本地JVM中的ID。
与ps命令相似,可以查看java进程ID(LVMID)。 使用方法:
jps [options][hostid]
[options]:-q: 只输出LVMID
-m: 输出JVM启动时传给主类的方法
-l:输出主类的全名,如果是Jar则输出jar的路径
-v: 输出JVM启动参数
jstat
JVM Statistics Monitoring Tool的缩写,JVM统计信息监控工具。
主要功能:监控JVM各种运行状态信息,如虚拟机进程中的类装载、内存、GC、JIT编译等数据。
使用方法:
jstat [options vmid [interval [s|ms] [count] ]]
参数解释:
Options — 选项,一般使用 -gcutil 查看gc情况
vmid — VM的进程号,与LVMID一致,使用jps查看
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
注:
1、本地JVM进程:与LVMID一致,使用jps查看
2、远程JVM进程:[protocol:][//]LVMID[@hostname[:post]/servername]
远程查看,需在目标服务上启动jstatd服务。
下面我们看下options选项:
- jstat -class vmid:显示加载class的数量,及所占空间等信息。
- jstat -compiler vmid:显示VM实时编译的数量等信息。
- jstat -gc vmid:显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
- jstat -gccapacity: 显示VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
- jstat -gcnew vmid:new对象的信息。
- jstat -gcnewcapacity vmid:new对象的信息及其占用量。
- jstat -gcold vmid:old对象的信息。
- jstat -gcoldcapacity vmid:old对象的信息及其占用量。
- jstat -gcpermcapacity vmid: perm对象的信息及其占用量。
- jstat -util vmid:统计gc信息统计。
- jstat -printcompilation vmid:当前VM执行的信息。
jmap
JVM Memory Map for Java的缩写,Java内存映像工具。
主要功能:
- 用于生成堆转储快照,即dump文件
- 可以查询finalize执行队列、Java堆和永久代的详细信息(使用率、当前用的GC等)
使用方法:
jmap [ option ] pidpid 与LVMID一致,使用jps查看
- dump: [live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件。 live子选项是可选的,如果指定live选项,那么只输出活的对象到文件。
- finalizerinfo 打印正等待回收的对象的信息。
- heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。
- histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”。 如果指定live,只统计活的对象数量。
- permstat 打印classload和jvm heap长久层的信息。 包含每个classloader的名字、活动性、地址、父classloader和加载的class数量,内部String的数量和占用内存数也会打印出来。
- F 强迫在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live参数无效。
- h | -help 打印辅助信息
- J 传递参数给jmap启动的jvm.
注:使用jmap的时候JVM会处于假死状态,所以只能在服务已死,但进程还在的情况下使用。
jstack
JVM Stack Trace for Java的缩写,堆栈跟踪工具。
主要功能:
- 用于生成JVM当前的线程快照(即当前JVM内每一个条线程正在执行的方法堆栈集合)
- 用于分析线程出现长时间停顿的原因
使用方法:
jstack [options] vmid
options: -F 当正常输出的请求不响应时,强制输出线程堆栈(jstack [-l] pid无法响应时,强制打印堆栈)
-l 除堆栈信息外,显示关于锁的附加信息
-m 打印混合模式(Java和本地C/C++帧)的堆栈跟踪信息。
-h 打印帮助信息。
-help 打印帮助信息。
jhat
用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言
java堆栈dump来源方式: 有以下几种方式可以生成一个Java heap dump:
- 使用jmap -dump选项获取一个运行时的heap dump。
- 使用jconsole选项通过运行时的HotSpotDiagnosticMXBean获取一个heap dump。
- 通过指定-XX:+HeapDumpOnOutOfMemoryErrorVM选项,在抛出OutOfMemoryError错误时,将会生成一个heap dump。
- 使用hprof。
访问 http://localhost:7000,就可以查看详细的内存信息
有时dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数: jhat -J-Xmx1024m <heap dump file>
总结
这些命令都在jdk的bin目录里,是jdk自带的一些监控分析工具,如果你在bin目录下没有找到对应的工具,说明该版本的jdk已经去除了该命令的支持。
在笔者日常性能测试诊断调优时,最常用的组合是jps和jstack,再加上第三方的分析工具。后续会介绍第三方的分析工具。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch快速搭建神经网络_Sequential操作
- PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
- Yii框架引入coreseek分页功能示例
- 使用keras内置的模型进行图片预测实例
- PHP convert_cyr_string()函数讲解
- 在keras中model.fit_generator()和model.fit()的区别说明
- 浅谈matplotlib 绘制梯度下降求解过程
- Ajax+PHP实现的分类列表框功能示例
- keras实现图像预处理并生成一个generator的案例
- Django+RestFramework API接口及接口文档并返回json数据操作
- Yii2框架实现利用mpdf创建pdf文件功能示例
- PHP超低内存遍历目录文件和读取超大文件的方法
- PHP bin2hex()函数基础实例讲解
- Kears 使用:通过回调函数保存最佳准确率下的模型操作
- django form和field具体方法和属性说明