`

java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用

 
阅读更多

源地址:http://my.oschina.net/u/551903/blog/312705

 

java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用

基于Sun HotSpot JVM 

 

这里将介绍几款sun hotspot jvm 自带的监控工具:

请确保java_home/bin配置到path环境变量下,因为这些工具都在jdk的bin目录下

 

jps(JVM Process Status Tool):JVM机进程状况工具


用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。使用jps时,不需要传递进程号做为参数。
Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstat服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看。
命令格式:jps [ options ] [ hostid ]
常用参数说明:
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
-v 输出传给JVM的参数。

例如:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\liu>jps -lmv
4868  -Dexe4j.semaphoreName=d:_program files (x86)_jetbrains_intellij idea 12.1.
7_bin_idea.exe -Dexe4j.moduleName=D:\Program Files (x86)\JetBrains\IntelliJ IDEA
 12.1.7\bin\idea.exe -Dexe4j.processCommFile=C:\Users\liu\AppData\Local\Temp\e4j
_p4868.tmp -Dexe4j.tempDir=C:\Users\liu\AppData\Local\Temp\e4jBF67.tmp_dir -Dexe
4j.unextractedPosition=558234 -Djava.library.path=D:\Program Files (x86)\JetBrai
ns\IntelliJ IDEA 12.1.7\bin\..\.\bin;C:\Program Files (x86)\Common Files\NetSara
ng;E:\project\arachne\web\trunk\muri_gm;E:\project\arachne\web\trunk\muri_im;C:\
Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\Windows
PowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program
Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;D:\Program Files\Java\jdk1.7.0_07\bin;D
:\Program Files\Java\jdk1.7.0_07\jre\bin;D:\Program Files\apache-maven-3.0.4-bin
\apache-maven-3.0.4\bin;E:\project\arachne\web\trunk\muri_7z;E:\project\arachne\
web\trunk\colorWIN;D:\Program Files\TortoiseSVN\bin;C:\Python33;E:\pro
2816 org.jetbrains.idea.maven.server.RemoteMavenServer -Djava.awt.headless=true
-Xmx512m -Dfile.encoding=GBK
4304 com.muri.web.common.Booter -agentlib:jdwp=transport=dt_socket,address=127.0
.0.1:58490,suspend=y,server=n -Dfile.encoding=UTF-8
9432 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\Program Files\Java\jdk1.7.0_07
lib\dt.jar;D:\Program Files\Java\jdk1.7.0_07lib\tools.jar;D:\Program Files\Java\
jdk1.7.0_07bin  -Dapplication.home=D:\Program Files\Java\jdk1.7.0_07 -Xms8m

 

 

其中4848为我的IDE的进程,2816为maven进程,4304为我的测试程序的进程,9432为jps自己的进程

 

 

jinfo(Configuration Info for Java):JVM配置信息工具

 

可以输出并修改运行时的java 进程的opts。用处比较简单,用于输出JAVA系统参数及命令行参数

命令格式:jinfo [ options ] [ pid ]

常用参数说明:

-flag  输出,修改,JVM命令行参数

例如:

1
2
3
4
5
6
7
8
C:\Users\liu>jinfo 4304
Attaching to process ID 4304, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 23.3-b01
Java System Properties:
.......
.......

 

 

Jstack(Stack Trace for Java):JVM堆栈跟踪工具

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64“

命令格式:jstack [ option ] pid

常用参数说明:

-F 当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l  长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m 打印java和native c/c++框架的所有栈信息.

-h | -help打印帮助信息

 例如:

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\liu>jstack 4304
2014-09-12 10:22:42
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.3-b01 mixed mode):
 
"QuartzScheduler_scheduler-NON_CLUSTERED_MisfireHandler" prio=6 tid=0x0000000012
d17800 nid=0x21d0 waiting on condition [0x000000001db7f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobSt
oreSupport.java:3963)
......
......

 

 

jstat(JVM statistics Monitoriing Tool):JVM统计信息监视工具


对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控
命令格式:jstat [ option  pid [interval [ s | ms ] [count] ] ] 
常用参数说明:
     -gcutil  输出已使用空间占总空间的百分比
     -gccapacity 输出堆中各个区域使用到的最大和最小空间

 例如:每隔1秒监控jvm内存一次,共监控5次

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\Users\liu>jstat -gccapacity 4304 1s 5
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC
       OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1
 32064.0 514048.0 249472.0 12416.0 11072.0 172800.0    64256.0  1028096.0    702
08.0    70208.0  21248.0  83968.0  83008.0  83008.0     25     1

 

 

1
2
3
4
5
6
7
C:\Users\liu>jstat -gcutil 4304 1s 5
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00  73.56  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435
  0.00   0.00  74.13  57.80  49.91     25    0.217     1    0.218    0.435

 

 

一些术语的中文解释:

         S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
           EC:年轻代中Eden(伊甸园)的容量 (字节)
           EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
           OC:Old代的容量 (字节)
           OU:Old代目前已使用空间 (字节)
           PC:Perm(持久代)的容量 (字节)
           PU:Perm(持久代)目前已使用空间 (字节)
         YGC:从应用程序启动到采样时年轻代中gc次数
       YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
         FGC:从应用程序启动到采样时old代(全gc)gc次数
       FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
         GCT:从应用程序启动到采样时gc用的总时间(s)

    NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

    NGCMX:年轻代(young)的最大容量 (字节)

        NGC:年轻代(young)中当前的容量 (字节)

   OGCMN:old代中初始化(最小)的大小 (字节) 

   OGCMX:old代的最大容量 (字节)

       OGC:old代当前新生成的容量 (字节)

   PGCMN:perm代中初始化(最小)的大小 (字节) 

   PGCMX:perm代的最大容量 (字节)   

       PGC:perm代当前新生成的容量 (字节)

          S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

         S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

           E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

           O:old代已使用的占当前容量百分比

           P:perm代已使用的占当前容量百分比

  S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

 S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)

    ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

       DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

          TT: 持有次数限制

       MTT : 最大持有次数限制

jmap( Memory Map for Java):JVM内存映像工具


打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)
命令格式:jmap [ option ] pid
常用参数说明:
        -dump:[live,]format=b,file=<filename> 使用二进制形式输出jvm的heap内容到文件中, live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. 
        -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. 
        -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效. 

例如:以二进制形式输入当前堆内存映像到文件data.hprof中

 

1
2
3
C:\Users\liu>jmap -dump:live,format=b,file=data1.hprof 4304
Dumping heap to C:\Users\liu\data1.hprof ...
Heap dump file created

 

 

生成的文件可以使用jhat工具进行分析,在OOM(内存溢出)时,分析大对象,非常有用
通过使用如下参数启动JVM,也可以获取到dump文件:
      -XX:+HeapDumpOnOutOfMemoryError
      -XX:HeapDumpPath=./java_pid<pid>.hprof

      在jvm发生内存溢出时生成内存映像文件

jhat(JVM Heap Analysis Tool):JVM堆转储快照分析工具


用于对JAVA heap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析,如LINUX上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题。
命令格式:jhat dumpfile(jmap生成的文件)

例如:分析jmap导出的内存映像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\Users\liu>jhat data1.hprof
Reading from data1.hprof...
Dump file created Fri Sep 12 10:27:25 CST 2014
Snapshot read, resolving...
Resolving 879257 objects...
Chasing references, expect 175 dots............................................
...............................................................................
..................................................
Eliminating duplicate references...............................................
...............................................................................
...............................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

 

 

执行成功后,访问 http://localhost:7000 即可查看内存信息,

 

 

MAT(Memory Analyzer Tool):一个基于Eclipse的内存分析工具


官网: http://www.eclipse.org/mat/
update:http://download.eclipse.org/mat/1.2/update-site/

这是eclipse的一个插件,安装后可以打开xxx.hprof文件,进行分析,比jhat更方便使用,有些时候由于线上xxx.hprof文件过大,直接使用jhat进行初步分析了,可以的话拷贝到本地分析效果更佳。

 

图形化监控工具:

 

在JDK安装目录bin下面有两个可视化监控工具
1. JConsole(Java Monitoring and Management Console) 基于JMX的可视化管理工具。
2. VisualVM(All-in-one Java Troubleshooting Tool)随JDK发布的最强大的运行监视和故障处理程序。
推荐使用VisualVM,他有很多插件,可以更方便的监控运行时JVM

转自: http://aub.iteye.com/blog/1873224

分享到:
评论

相关推荐

    java性能调优工具命令大全.zip

    jvm性能调优工具命令大全.zip jps jstat jmap jhat jstack jinfo jps JVM Process Status Tool GChisto jvisualvm ...

    虚拟机监控工具详请.rar

    本文将深入探讨标题为"虚拟机监控工具详请.rar"的压缩包中所包含的知识点,主要关注Java虚拟机(JVM)的监控工具。这些工具对于理解应用程序的性能、内存使用以及线程状态至关重要。以下是关于这些工具的详细介绍: ...

    深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明1

    此外,作者还提供了丰富的虚拟机性能监控和故障处理工具的使用指南,包括基础工具如jps、jstat、jinfo、jmap、jhat、jstack,以及可视化工具JHSDB、JConsole、VisualVM和Java Mission Control。这些工具帮助开发者...

    深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)1

    此外,书中还涵盖了虚拟机性能监控和故障处理工具,如jps、jstat、jinfo、jmap、jhat、jstack等,以及可视化工具如JConsole、VisualVM和Java Mission Control等,帮助开发者进行问题诊断和性能调优。 最后,书中的...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    JDK自带了一系列强大的诊断工具,如jps(Java进程查看器)、jstat(统计信息工具)、jinfo(配置信息工具)、jmap(内存映射工具)、jhat(堆转储分析工具)和jstack(线程堆栈跟踪工具)。熟练掌握这些工具的使用,...

    基于Spring Boot框架的JVM性能调优与内存管理.zip

    提供多种JVM监控工具的使用示例,如jps、jstat、jmap、jhat、jstack、jinfo和jcmd,帮助开发者实时监控JVM的运行状态。 3. 内存管理与垃圾收集 演示如何通过调整JVM参数(如XX:PretenureSizeThreshold)来影响...

    Java虚拟机(第二版)1

    第4章涵盖了JDK提供的各种诊断工具,如jps、jstat、jinfo、jmap、jhat、jstack和HSDIS,它们是分析和调试JVM问题的得力助手。4.3章节介绍了可视化工具JConsole和VisualVM,帮助开发者直观地监控和分析Java应用程序的...

    Java性能监控工具

    在Java中,有一些内置的工具可以用来监控和分析性能,包括内存使用、垃圾回收等方面。 首先,`jps`命令类似于Linux的`ps`命令,用于列出本地正在运行的Java进程ID。`jstat`工具则可以提供虚拟机(VM)的各种统计...

    JVM命令行监测工具详解

    为了监控和调试JVM的运行状态,Oracle提供了多个命令行工具,包括jps、jstack、jstat、jmap和jcmd。这些工具可以帮助开发者了解和解决性能问题,优化应用程序。 一、jps (Java Process Status) jps是查看当前系统中...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第56节可视化虚拟机工具-Jconsole内存监控00:07:09分钟 | 第57节可视化虚拟机工具-Jconsole线程监控00:12:18分钟 | 第58节死锁原理以及可视化虚拟机工具-Jconsole线程死锁监控00:10:38分钟 | 第59节VisualVM使用...

    JDK监控和故障处理工具

    例如,使用 `jmap -dump:live,format=b,file=&lt;filename&gt; &lt;pid&gt;` 可以生成堆的快照文件,方便后续使用内存分析工具(如MAT、JVisualVM等)进行分析。 ### JSTACK JSTACK用于生成当前JVM中所有线程的堆栈跟踪,这对于...

    Java虚拟机

    4.2.4 jmap:Java内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java堆栈跟踪工具 4.2.7 HSDIS:JIT生成代码反汇编 4.3 JDK的可视化工具 4.3.1 JConsole:Java监视与管理控制台 4.3.2 ...

    HCNA-HNTD V2.1入门培训教材.pdf

    基础故障处理工具包括jps、jstat、jinfo、jmap、jhat和jstack等。这些工具能够帮助开发者监控虚拟机的状态、统计信息、内存映像和堆转储等。可视化故障处理工具如JHSDB、JConsole、VisualVM和Java Mission Control...

    深入理解java虚拟机的故障处理工具

    Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,管理内存,以及执行垃圾回收等任务。在开发和维护Java应用过程中,了解和使用JVM的故障处理工具对于定位和解决问题至关重要。这些工具可以帮助...

    Tomcat教程-JVM相关工具.docx

    jconsole是一个图形化界面工具,可以实时监控Java应用的性能和资源使用情况,包括JVM指标、线程、类装载、内存、垃圾收集等。 8. **jvisualvm (Java VisualVM)**: jvisualvm是另一个功能强大的Java应用性能分析...

    Java诊断工具源代码.zip

    1. **JVM内置工具**:Java虚拟机(JVM)提供了多种内置的诊断工具,如`jps`(Java进程状态工具)、`jstat`(Java统计监视工具)、`jinfo`(配置信息工具)、`jmap`(映射工具)、`jhat`(堆分析工具)和`jstack`...

    使用java自带工具监控jvm运行状态

    除了上述工具,还有其他如`jmap`(用于生成堆转储文件和查看内存映射)、`jhat`(分析堆转储文件)和`jmc`(Java Mission Control,一个更全面的性能分析工具集)等,它们提供了丰富的功能来帮助开发者深入理解JVM的...

    java工具

    7. **诊断工具** - `jstack`、`jmap`、`jinfo`:这些命令行工具用于调试和诊断Java应用程序,例如,`jstack`用于打印线程堆栈跟踪,`jmap`用于获取堆内存映射,`jinfo`则可以显示和修改Java进程的配置信息。...

Global site tag (gtag.js) - Google Analytics