java性能调试命令_性能测试必备监控技能jvm之jdk命令行工具篇16
3.png
前言
对于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 ] pid
pid 与LVMID一致,使用jps查看
dump: [live,]format=b,file= 使用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。
有时dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat -J-Xmx1024m
总结
这些命令都在jdk的bin目录里,是jdk自带的一些监控分析工具,如果你在bin目录下没有找到对应的工具,说明该版本的jdk已经去除了该命令的支持。
在笔者日常性能测试诊断调优时,最常用的组合是jps和jstack,再加上第三方的分析工具。后续会介绍第三方的分析工具。
java性能调试命令_性能测试必备监控技能jvm之jdk命令行工具篇16相关推荐
- JAVA性能调试+JProfiler使用相关
一.JProfiler下载.安装与激活 1.1 下载 直接官网下载(https://www.ej-technologies.com/download/jprofiler/files) 建议下载9.X系 ...
- java 查看gc 次数_使用Jstat监控gc情况
性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源 ...
- java 性能 火焰图_性能调优工具-火焰图
性能调优工具-火焰图 发布时间:2019-07-17 19:29, 浏览次数:402 前言 工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快 ...
- antd 3升级命令_是时候拥有一个你自己的命令行工具了
本篇博客主要介绍了如何使用commander, inquirer以及chalk从零开始,创建属于自己的命令行工具. 0. 一分钟体验 首先我们先花一分钟的时间,体验一下创建自己的命令行cli工具是什么 ...
- find 命令_除了 find,还有这些文件查找命令
(给Linux爱好者加星标,提升Linux技能) 转自:良许Linux 在系统里查找文件,是所有工程师都必备的技能(不管你用的是 Windows .Linux.还是 MacOS 系统).对于 Linu ...
- c#样条曲线命令_如何定制CAD功能区界面中的命令?
在AUTOCAD 高版本中使用了RIBBON功能区界面,到了2015版以后舍弃了传统的菜单工具栏界面,只保留了RIBBON界面,但为了照顾一部分的习惯,可以选择打开菜单栏.不少人仍习惯旧版经典界面,因 ...
- 刷新mac地址命令_配置好Cisco交换机需要熟悉IOS命令及相关的知识
一.几种配置命令模式 switch> 这种提示符表示是在用户命令模式,只能使用一些查看命令. switch# 这种提示符表示是在特权命令模式. switch(config)# 这种提示符表示是全 ...
- linux 上plsql命令_在 Linux 上压缩文件:zip 命令的各种变体及用法 | Linux 中国
除了压缩和解压缩文件外,你还可以使用 zip 命令执行许多有趣的操作.这是一些其他的 zip 选项以及它们如何提供帮助.-- Sandra Henry-stocker 为了节省一些磁盘空间并将文件打包 ...
- linux vim命令_提升生产力的20大Linux Vim命令
linux vim命令 VIM or the Vi Improved text editor is one of the most advanced text editors available. L ...
最新文章
- 【android开发】Android防止内存溢出浅析
- mysql的错误代码1064_mysql错误代码之1064的解决方案
- python学习04
- html怎样让列表向下移动,Html无序列表ul控件实现行上下移动.
- Keras报错:`Dense` can accept only 1 positional arguments ('units',), but you passed the followin.....
- android数据序列化的实现
- homebrew 安装 formula 的不同历史版本——以安装 node 为例
- 使用工具(Database Configuration Assistant)创建Oracle数据库
- JavaScript的Array对象使用(1)
- Android中常见布局
- awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
- Domain应用之 根据某个Many2one的对象的 X2many对象 过滤
- 推荐个我在用的免费翻译软件,支持多家翻译API整合
- 86版五笔-拆字规则
- cdr添加节点快捷键_史上最全CDR快捷键命令汇总
- Dapper使用技巧和基础CRUD
- ei检索的cpss_我想查EI会议论文检索情况,请问是如何查询的呢?
- arm指令一般编码格式和一般语法格式
- 文本分类+机器学习浅谈?
- 怎么将Java中的小瓶子删掉_AcWing 1224. 交换瓶子 JAVA O(n)
热门文章
- ImportError: libnvinfer.so.7: cannot open shared object file: No such file or directory
- IOS开发笔记 - 先有鸡,还是先有蛋?相互引用的奇遇!
- MDM之Goodness分析报告
- 运营商利润不均衡(转)
- python爬取网易云音乐_爬取网易云音乐评论(一)——用python执行JS脚本
- Mysql间隔取数据,实现sqlserver的row_number()函数
- (36)JS运动之使物体向右运动
- android颜色表
- PostgreSQL的checkpoint能否并行
- mysql安全删除大表