几个与JVM相关的JDK工具:jps, jstat, jmap
五月 2, 2009 in Java开源
?
在项目中遇到OOM(Out of Memory)的问题,为了分析内存和JVM的垃圾回收器GC问题,一并把JVM相关的一些工具也研究了一下:
- jps :Java进程查看工具,实际上它和Unix/Linux上面的ps命令的功能差不多
- jstat :Java内存使用情况监控工具
- jmap :输出JVM内存中对象的工具
这些工具位于JAVA_HOME/bin目录下
?
一,jps (Java Virtual Machine Process Status Tool) JVM进程状态工具
jps用来查看host上运行的所有java进程的pid(lvmid ),一般情况下使用这个工具的目的只是为了找出运行的jvm进程ID,即lvmid,然后可以进一步使用其它的工具来监控和分析JVM,因此可以说这个工具并没有太多的功能。
如我本地只启动了visualVM,jps可以看到
1 2 |
2156 Jps 1932 Main |
常用的几个参数:
-l 输出java应用程序的main class的完整包
-q 仅显示pid,不显示其它任何相关信息
-m 输出传递给main方法的参数
-v 输出传递给JVM的参数。在诊断JVM相关问题的时候,这个参数可以查看JVM相关参数的设置
如使用 jps -l -v 命令可以输出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
C:\Oracle\Middleware\jdk160_05\bin>jps -l -v 5780 sun.tools.jps.Jps -Dapplication.home=C:\Oracle\Middleware\jdk160_05 -Xms8m 1932 org/netbeans/Main -Xms24m -Xmx192m -Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -Dsun.jvmstat.perdata.syncWaitMs=10000 -Djdk.home=C:/Oracle/Middleware/jdk160_05 -Dnetbeans.home=D:\Arone.Zhang\jvm\visualvm_111\platform9 -Dnetbeans.dirs=D:\Arone.Zhang\jvm\visualvm_111\visualvm;D:\Arone.Zhang\jvm\visualvm_111\profiler3 -Dnetbeans.user=C:\Users\Arone.Zhang\AppData\Roaming\.visualvm\1.1.1 -Dnetbeans.system_http_proxy=DIRECT -Dnetbeans.system_http_non_proxy_hosts= -Dsun.awt.keepWorkingSetOnMinimize=true |
?
jps的官方描述:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
?
二,jstat (Java Virtual Machine Statistics Monitoring Tool) JVM统计信息监控工具
jstat根据lvmid来实时监控Java应用程序的资源和性能,包括jvm的heap size和GC的回收状况,比起jps工具jstat要强大得多,同时使用起来也较复杂。
?
jstat有如下的生成结果选项(通过 jstat –options 来查看),jstat需要列出lvmid的统计信息,因此需要和jps配合使用
-class :显示加载类和卸载类的数量、所占空间大小和加载类和卸载类所花的时间
-compiler :显示VM实时编译的统计信息,包括编译任务执行的数量、编译任务失败的数量、变为无效的编译任务数量、执行编译任务所花费的时间等等
-gc :显示GC的堆信息,包括存活区、新生代区、永久区、发生GC的次数和所花费的时间
-gccapacity :显示JVM内存池中三代(young、old、perm)对象的使用和占用能力
-gccause :这个和-gcutil选项一样都是显示GC统计信息的汇总信息,只是包括了最后GC事件和当前GC事件
-gcnew :显示新生代对象的统计信息
-gcnewcapacity :显示新生代对象的信息和占用量
-gcold :显示老一代对象的统计信息
-gcoldcapacity :显示老一代对象的信息和占用量
-gcpermcapacity :显示永久代对象的信息和占用量
-gcutil :显示GC统计信息的汇总信息
-printcompilation :打印当前VM执行的信息
?
此工具中涉及到的永久代、老一代和新生代的概念和jdk的GC算法有密切的关系,关于GC的内容请查看Tuning Garbage Collection with the 5.0 JavaTM Virtual Machine
jstat使用的除了上面生成结果选项之外,还有收集统计信息的时间间隔和统计的次数,同时还可以控制输出结果的列标题如何出现。
1 2 3 4 5 6 7 8 |
C:\Oracle\Middleware\jdk160_05\bin>jstat -gcnew -t -h3 1932 30 5 Timestamp S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 26638.9 192.0 192.0 0.0 192.0 1 15 96.0 1728.0 1472.7 12737 17.803 26639.0 192.0 192.0 0.0 192.0 1 15 96.0 1728.0 1472.7 12737 17.803 26639.0 192.0 192.0 0.0 192.0 1 15 96.0 1728.0 1472.7 12737 17.803 Timestamp S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 26639.0 192.0 192.0 0.0 192.0 1 15 96.0 1728.0 1472.7 12737 17.803 26639.1 192.0 192.0 0.0 192.0 1 15 96.0 1728.0 1472.7 12737 17.803 |
?
上面的 -t 选项是用来打印timestamp,-hN选项是用来控制打印列标题,这个选项对于多屏输出结果的时候比较有用,因此上面的jstat -gcnew -t -h3 1932 30 5 代表针对lvmid为 1932 的Java进程收集新生代对象统计信息:包括打印时间戳、每隔3行打印一次标题、30ms统计一次、共统计5次
每个选项输出列的含义请查看官方文档,jstat的官方描述:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
虽然jstat提供了监控GC状态的强大功能,但是由于它是命令行,在实际问题的分析过程中难度比较高,因此市场上面出现了很多基于此命令的可视化工具,开源工具visualVM就是其中的佼佼者,JDK1.6之后,它已经包括在jdk中了。
?
关于如何使用visualVM来可视化监控JVM状况,后续将整理相关的文章。
?
三,jmap (Memory Map) JVM内存对象打印工具
jmap根据lvmid来Java进程的内存所有对象
?
首先根据选项打印出Java对象堆的直方图信息 ,包括Java类、类实例对象数量、在内存中占有量的大小以及类的完整包名,下面是缩减版本的直方图信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
C:\Oracle\Middleware\jdk160_05\bin>jmap -histo 3432 num #instances #bytes class name ---------------------------------------------- 1: 14644 20883096 [I 2: 69176 7689640 3: 111994 6561320 [C 4: 69176 5542192 5: 1933 4825592 [Ljavax.swing.text.GapContent$MarkData; 6: 100440 4480456 7: 6506 3771008 8: 90461 3618440 org.openide.util.RequestProcessor$Item 9: 90239 3609560 org.openide.util.RequestProcessor$EnqueueTask ...... 3315: 1 8 sun.misc.Launcher$Factory 3316: 1 8 org.netbeans.core.windows.WindowSystemImpl 3317: 1 8 javax.swing.filechooser.WindowsFileSystemView 3318: 1 8 org.netbeans.ModuleFactory Total 1767075 103137272 |
?
其次是将内存堆的信息dump成为一个二进制文件 ,供jhat这样的Java内存分析工具来使用,如下降Java内存对象堆dump为heap.bin文件:
1 2 3 |
C:\Oracle\Middleware\jdk160_05\bin>jmap -dump:format=b,file=heap.bin 3432 Dumping heap to C:\Oracle\Middleware\jdk160_05\bin\heap.bin ... Heap dump file created |
命令运行完成之后,在同目录下会生成一个heap.bin二进制内存对象堆文件
?
此工具使用比较简单,但是它对于分析内存溢出问题非常有用,目前有很多用来分析Java内存对象的工具,如收费的工具 有:jprofiler,YourKit Java Profiler;而像Eclipse MAT则是优秀的内存对象分析开源工具,后续将整理相关的文章。
?
–
无相关文章.
相关推荐
jstat是一个命令行工具,利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行监控,包括对Heap size和垃圾回收状况的监控等等。 jps jps是一个命令行工具,用于查看JVM中的所有进程状态,包括进程ID、...
本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps、jstat、jmap 和 jconsole,并探讨它们各自的功能及应用场景。 #### jps - 查看运行中的 Java 进程 **jps** 类似于 Unix/Linux 系统中的 `ps` 命令,用于列出...
为了监控和调试JVM的运行状态,Oracle提供了多个命令行工具,包括jps、jstack、jstat、jmap和jcmd。这些工具可以帮助开发者了解和解决性能问题,优化应用程序。 一、jps (Java Process Status) jps是查看当前系统中...
为了有效地监控和调试Java应用程序,Oracle JDK提供了多种强大的命令行工具,如jconsole、jmap、jstat等。下面将详细解释这些工具的功能和使用场景。 1. **jstack**: jstack是一种用于生成Java线程堆栈跟踪的工具...
本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...
### JDK内置工具使用技巧详解 #### 一、引言 JDK(Java Development Kit)作为Java编程语言的核心组件,不仅提供了必要的编译、调试及文档工具,还配备了一系列用于监控和诊断应用程序运行状态的工具。本文将详细...
本教程将详细解释Tomcat服务器中与JVM相关的几个关键工具,包括它们的功能、使用方法及示例。 1. **jps (Java Virtual Machine Process Status tool)**: jps命令用于列出运行在指定主机上的Java虚拟机进程。通过...
它包含的工具如jps、jstat、jmap、jinfo、jstack和JConsole,都是JDK的标准组成部分,帮助开发者深入理解JVM的内存状态。 1. **jps (Java Virtual Machine Process Status Tool)** 类似于Unix系统中的`ps`命令,...
首先,我们来了解JDK提供的几个监控和故障处理工具的基本信息和作用。 1. JPS(JVM Process Status Tool) JPS是一个虚拟机进程状况工具,它能够列出正在运行的虚拟机进程,并显示每个进程的主类名称和主类的全名。...
jvm命令行工具,java性能优化,jdk命令工具, jcmd命令、jps命令、jmap命令、jstack命令、jinfo命令、jstat命令
本篇将详细介绍JDK自带的几个主要调试工具,包括`jmap`、`jstack`、`jconsole`,以及相关的文档资源。 1. `jmap`:这是一个用于诊断堆内存状况的工具。通过`jmap`,我们可以获取到堆内存的详细映射,包括对象分配...
JDK自带的监控和分析工具包括但不限于以下几种: 1. jstatd:是一个监控服务,它在目标机器上创建一个RMI(远程方法调用)注册表,并使用这个注册表来监听JVM进程的创建和终止。其他工具如jvisualvm可通过它来远程...
11. **JVM诊断工具**:如jps、jstat、jmap、jhat等,它们帮助开发者获取JVM的运行信息,定位问题。 12. **JDK动态代理**:了解如何使用Java的反射和代理机制来实现动态绑定和拦截调用。 13. **模块系统**:Java 9...
- **功能介绍**:`jconsole`是JDK自带的一个GUI工具,用于监控JVM的运行状态。 - **主要功能**: - 监控JVM内存使用情况。 - 查看垃圾收集器的状态。 - 查看线程信息。 ##### 9. Memory Analyzer Tool(MAT)...
- **概述**:`jps`(Java Process Status Tool)是JDK自带的一个实用工具,用于显示当前计算机上所有正在运行的Java应用程序的进程ID(PID)及其主类名或JAR包名。这对于快速检查服务是否启动成功非常有用。 - **...
- **JDK工具**:如jps、jstat、jmap、jhat等,用于监控和诊断JVM状态。 - **参数设置**:如-Xms、-Xmx、-XX:NewRatio等,调整JVM内存配置。 以上是《深入理解Java虚拟机》一书中涉及的主要知识点,通过学习这些...
`jps`是JDK自带的一个简单实用的工具,用于列出当前正在运行的所有Java应用程序的进程ID以及基本状态信息。其语法格式如下: ```shell jps [options] [hostid] ``` 如果不指定`hostid`,则默认为当前主机。`jps`的...
在Windows操作系统上安装JDK通常包括以下几个步骤: 1. **下载JDK**:首先,你需要从Oracle官网或者其他可信赖的源下载适合你操作系统的JDK版本。例如,文件名“jdk-8u191-windows-x64.tmp”表明这是针对Windows 64...
此外,JVM监控工具如jps、jstat、jmap等,可以帮助开发者监控和调试应用程序,确保其高效稳定运行。 总的来说,JDK-8u171是Linux环境中进行Java开发的重要组件。它不仅提供了丰富的开发工具,还带来了Java 8的众多...
下面将从硬件信息、中间件、监控Linux服务器、监控和诊断JVM、其它命令五个方面总结常用的性能测试命令。 一、硬件信息 在性能测试中,对硬件信息的了解是非常重要的。下面是一些常用的命令: * 查看 Redhat 版本...