JVM性能监控与内存分析工具——命令行工具(1)

前言

经常使用适当的虚拟机监控和内存分析工具可以加快我们分析数据、定位解决问题的速度。目前市场上有许多强大的Java性能监控工具,但是在JDK的bin目录中其实包含了许多小巧的分析工具,并且这些工具也非常稳定,能在分析应用程序性能、定位解决故障时发挥巨大的作用。

本文所介绍的工具全部是基于Windows系统下的JDK 1.8,如果版本、操作系统不同,工具所支持的功能可能会有所差别。另外由于这些工具都是存放在JDK的bin目录下,所以为了能在命令行中直接使用这些命令,需要将%JAVA_HOME%\bin添加到PATH环境变量的路径中。

jps:虚拟机进程状况工具

jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程的命令,并且可以显示虚拟机执行主类名称(main(函数所在的类))以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier, LVMID)。

这个命令简单实用,并且其他的JDK工具都需要这条命令所查询到的LVMID来确定要监控的虚拟机进程。对于本地虚拟机来说,LVMID与操作系统的进程PID是一致的,但是如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能通过jps显示主类的功能才能区分。

jps命令格式:jps [options ] [hostid]

jps执行结果:

PS C:\Profile\Tools> jps -l
1816 
6072 sun.tools.jps.Jps
8168 C:\Profile\Tools\SoapUI-5.2.1\bin\SoapUI-5.2.1.exe

其中-l 输出应用程序main class的完整package名或者应用程序的jar文件完整路径名,其他常用选项还有

选项功能
-v输出传递给JVM的参数
-m输出传递给main 方法的参数
-q只显示LVMID,不显示class名称,jar文件名和传递给main 方法的参数

jstat:虚拟机统计信息监控工具

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具,而且主要集中在分析JVM内存的GC状况。

jstat命令格式为:jstat [ option vmid [interval[s|ms] [count]] ]

由于jstat命令也可以查询远程虚拟机进程中的JVM内存状态,所以在查询远程虚拟机进程时,那VMID的格式是:
[protocol: ] [//] lvmid [@hostname[:port]/servername]

参数interval和count代表查询间隔和次数,缺省值为查询一次。假设需要每200毫秒查询一次10684进程垃圾收集状况,一共查询10次,此时命令如下:
jstat -gc 10684 200 10

选项option代表用户查询类型,主要分为装载类、垃圾收集、运行期编译状况这三类,主要用到的参数如下表所示

选项功能
-class监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc监视Java堆状况
-gccapacity监视内容与-gc基本相同,主要关注各个区域使用到的最大、最小空间
-gcutil监视内容与-gc基本相同,主要关注已使用空间所占百分比
-gccause会额外输出导致上一次GC产生的原因
-compiler输出JIT编译器编译过的方法、耗时等信息

下面以最常用的-gcutil参数为例,输出结果如下所示

PS C:\Profile\Tools> jstat -gcutil 10684
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   0.00   6.00   0.00  17.43  19.76      0    0.000     0    0.000    0.000

因为我例子是一个很简单的程序,所以并没有使用什么内存,其中输出参数代表如下:
S0: Survivor space 0 已使用空间的百分比
S1: Survivor space 1 已使用空间的百分比
E: Eden space 已使用空间的百分比
O: Old space 已使用空间的百分比
M: Method space 已使用空间的百分比,其实这个也称作永久代,所以有的JDK版本会用P来表示
CCS:Compressed class space已使用空间的百分比
YGC: Young GC 的次数
YGCT: Young GC 所用的时间 单位秒
FGC: Full GC 的次数
FGCT: Full GC 所用的时间 单位秒
GCT: 用于垃圾回收的总时间 单位秒

jinfo:Java配置信息工具

jinfo(Configuration Info for Java)可以用来实时地查看未被显示指定的参数的系统默认值,甚至可以用来调整这些参数值。

jinfo命令格式: jinfo [option] pid

下面例子是使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来

PS C:\Profile\Tools> jinfo -sysprops 1324
Attaching to process ID 1324, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.102-b14
sun.boot.library.path = C:\Profile\Tools\Java\jdk1.8.0_102\jre\bin
user.country.format = CN
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = ;
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = Service Pack 1
sun.java.launcher = SUN_STANDARD
user.script = 
user.country = US
user.dir = C:\Profile\Tools\Java\Workspace\Practice
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_102-b14
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = C:\Profile\Tools\Java\jdk1.8.0_102\jre\lib\endorsed
line.separator = 
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM常用监控工具有很多,其中一个重要的工具就是dump分析工具。dump文件是指Java进程的内存快照,可以用于分析Java进程的内存使用情况,了解Java进程内部的情况。 下面介绍几个常用的dump分析工具: 1. jmap jmap是JDK自带的一个命令行工具,可以生成Java进程的内存快照。使用jmap生成dump文件的命令如下: ``` jmap -dump:format=b,file=<filename> <pid> ``` 其中,format=b表示生成二进制格式的dump文件,file=<filename>表示指定保存dump文件的路径和文件名,<pid>表示Java进程的进程ID。 2. jstack jstack也是JDK自带的一个命令行工具,可以打印Java进程的线程堆栈信息。使用jstack生成dump文件的命令如下: ``` jstack -F <pid> > <filename> ``` 其中,-F表示在进程不响应时强制获取线程堆栈信息,<pid>表示Java进程的进程ID,> <filename>表示将线程堆栈信息输出到指定文件。 3. VisualVM VisualVM是一个功能强大的Java监控分析工具,可以监控分析本地和远程Java进程。VisualVM可以生成Java进程的各种信息,包括dump文件。使用VisualVM生成dump文件的步骤如下: - 在VisualVM中打开需要生成dump文件的Java进程。 - 选择“Heap Dump”选项卡,点击“Heap Dump”按钮。 - 选择保存dump文件的路径和文件名,点击“Save”按钮。 4. Eclipse Memory Analyzer Eclipse Memory Analyzer是一款功能强大的Java内存分析工具,可以帮助开发人员分析Java进程的内存使用情况。Eclipse Memory Analyzer可以打开各种格式的dump文件,包括使用jmap、jstack和VisualVM生成的dump文件。 以上是常用的dump分析工具,可以帮助开发人员了解Java进程的内存使用情况。同时,需要注意的是,生成dump文件会对Java进程产生一定的影响,需要谨慎使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值