性能测试必备监控技能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内存映像工具。

主要功能:

  1. 用于生成堆转储快照,即dump文件
  2. 可以查询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的缩写,堆栈跟踪工具。

主要功能:

  1. 用于生成JVM当前的线程快照(即当前JVM内每一个条线程正在执行的方法堆栈集合)
  2. 用于分析线程出现长时间停顿的原因

使用方法:

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,再加上第三方的分析工具。后续会介绍第三方的分析工具。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2017-05-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

数据权限通用设计方案

问题引出 最近,许多学员反馈项目中需要处理数据权限,但是不知道怎么处理比较合适。这篇文章将针对这个问题,给出一种比较通用且容易扩展的数据权限设计方案。 现状 目...

1.1K50
来自专栏张善友的专栏

CentOS 7 安装Java 1.8

38560
来自专栏linux驱动个人学习

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】

Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)

24320
来自专栏linux运维学习

linux学习第六十七篇:告警系统主脚本,告警系统配置文件,告警系统监控项目

告警系统主脚本 把shell脚本放到/usr/local/sbin/下 创建mon目录来存放告警系统脚本。在/mon目录分别创建bin,conf,log,mai...

345130
来自专栏Golang语言社区

Linux命令行:find的26个用法示例

作者 | Wray 来自 | http://www.codebelief.com/ Linux系统中的 find 命令在查找文件时非常有用而且方便。它可以根...

377130
来自专栏张善友的专栏

CentOS 7 安装Java 1.8

携程的Apollo配置中心服务端[https://github.com/ctripcorp/apollo/wiki]推荐的Java版本是:1.8+, 本文介绍如...

67470
来自专栏码洞

徒手教你使用zookeeper编写服务发现

zookeeper的内部是一个key/value存储引擎,key是以树状的形式构成了一个多级的层次结构,每一个节点既可以存储数据,又可以作为一个目录存放下一级子...

14510
来自专栏帘卷西风的专栏

Linux常用指令

服务器部署会经常用到linux,很多时候都是用的时候上网查一下指令,然后用完过不了多久就忘记了,因此本文记录一些自己常用的linux指令,以作备忘。并不断添...

30130
来自专栏源哥的专栏

客户端数据集/服务端数据集的原理和设计

最近在开发一个比较大型的项目,主要采用Activex控件做底层操作,采用Javascript做逻辑控制和处理,采用Ajax实现服务端与客户端之间的交互,而在实际...

9540
来自专栏玩转JavaEE

Linux上安装Zookeeper以及一些注意事项

最近打算出一个系列,介绍Dubbo的使用。 ---- 分布式应用现在已经越来越广泛,Spring Could也是一个不错的一站式解决方案,不过据我了解国内目前貌...

46880

扫码关注云+社区

领取腾讯云代金券