JVM性能监控与内存分析工具——命令行工具(1)
2016-11-17 14:57
686 查看
前言
经常使用适当的虚拟机监控和内存分析工具可以加快我们分析数据、定位解决问题的速度。目前市场上有许多强大的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编译器编译过的方法、耗时等信息 |
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 = ...
相关文章推荐
- linux系统负载命令,以及jdk内存分析常用命令,jvm性能监控内存泄漏分析工具
- JVM性能监控工具(一)-jdk命令行工具
- Java内存泄露监控工具:JVM监控工具介绍及分析
- JAVA内存系列五之JVM性能监控与故障处理工具
- Java内存泄露监控工具:JVM监控工具介绍
- JAVA性能优化内存监控的一些开源工具
- 《高性能Linux服务器构建实战运维监控、性能调优与集群应用》 10.6 Linux下常见的性能分析工具 vmstat
- JAVA性能优化内存监控的一些开源工具
- JVM内存监控、分析
- JVM内存状况查看方法和分析工具
- [原创]Linux性能监控分析工具nmon介绍
- 深入理解JVM—性能监控工具
- java性能监控工具 可以检查内存泄露
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- MySQL监控、性能分析——工具篇
- 使用 ksar 工具分析10个方面系统性能 ——磁盘 I/O、网络、CPU 、内存、NFS 、系统中断、内存分页
- jvm 内存分析工具
- 几个ajax js性能优化和内存泄露问题及检测分析工具
- Java 内存泄露监控工具-- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
- valgrind: 一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具