`
aubdiy
  • 浏览: 693382 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《深入理解Java虚拟机》读后总结(三)JVM内存监控

    博客分类:
  • JVM
阅读更多

《深入理解Java虚拟机》读后总结

(一)Sun HotSpot JVM内存模型

(二)Sun HotSpot JVM内存分配

(三)Sun HotSpot JVM内存监控

(四)Sun HotSpot JVM垃圾回收

 

基于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的参数。

例如:

C:\Users\Administrator>jps -lmv
1796  -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx512m -XX:MaxPermSize=256m
7340 sun.tools.jps.Jps -lmv -Denv.class.path=.;D:\DevTools\VM\jdk1.6.0_31\\lib\dt.jar;D:\DevTools\VM\jdk1.6.0_31\\lib\tools.jar; -Dapplication.home=D:\DevTools\VM\jdk1.6.0_31 -Xms8m

其中pid为1796的是我的eclipse进程,pid为7340的是jps命令本身的进程

 

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

 

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

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

常用参数说明:

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

例如:

 C:\Users\Administrator>jinfo 1796

 将会打印出很多jvm运行时参数信息,由于比较长这里不再打印出来,可以自己试试,内容一目了然

 

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打印帮助信息

 例如:

C:\Users\Administrator>jstack 1796
2013-05-22 11:42:38
Full thread dump Java HotSpot(TM) Client VM (20.6-b01 mixed mode):

"Worker-30" prio=6 tid=0x06514c00 nid=0x1018 in Object.wait() [0x056af000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188)
        - locked <0x1ad84a90> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)
......
......
......
......

 

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


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

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

C:\Users\Administrator>jstat -gccapacity  1796  1s  5
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
 13632.0 174720.0  40896.0 4032.0 4032.0  32832.0    27328.0   349568.0    81684.0    81684.0  12288.0 262144.0  80640.0  80640.0     42    96
 13632.0 174720.0  40896.0 4032.0 4032.0  32832.0    27328.0   349568.0    81684.0    81684.0  12288.0 262144.0  80640.0  80640.0     42    96
 13632.0 174720.0  40896.0 4032.0 4032.0  32832.0    27328.0   349568.0    81684.0    81684.0  12288.0 262144.0  80640.0  80640.0     42    96
 13632.0 174720.0  40896.0 4032.0 4032.0  32832.0    27328.0   349568.0    81684.0    81684.0  12288.0 262144.0  80640.0  80640.0     42    96
 13632.0 174720.0  40896.0 4032.0 4032.0  32832.0    27328.0   349568.0    81684.0    81684.0  12288.0 262144.0  80640.0  80640.0     42    97
C:\Users\Administrator>jstat -gcutil  1796  1s  5
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00   0.00   0.52  53.35  99.77     42    0.513    99   38.119   38.632
  0.00   0.00   0.52  53.35  99.77     42    0.513    99   38.119   38.632
  0.00   0.00   0.52  53.35  99.77     42    0.513    99   38.119   38.632
  0.00   0.00   0.52  53.35  99.77     42    0.513    99   38.119   38.632
  0.00   0.00   0.52  53.35  99.77     42    0.513    99   38.119   38.632

  一些术语的中文解释:

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

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

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

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

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

   OGCMX:old代的最大容量 (KB)

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

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

   PGCMX:perm代的最大容量 (KB)   

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

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

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

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

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

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

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

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

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

       DSS:当前需要survivor(幸存区)的容量 (KB)(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中

jmap -dump:live,format=b,file=data.hprof 1796

生成的文件可以使用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导出的内存映像

jhat data.hprof

 执行成功后,访问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

分享到:
评论
2 楼 aubdiy 2018-12-07  
RojerAlone 写道
你好,你这个写错了,容量的单位不是字节,是KB。[http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html][/http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html]

感谢纠正
1 楼 RojerAlone 2017-07-12  
你好,你这个写错了,容量的单位不是字节,是KB。[http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html][/http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html]

相关推荐

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

    第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾回收-概述00:06:20分钟 | 第33节垃圾回收-判断对象是否存活算法-引用计数法详解00:14:08分钟 | 第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:...

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

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

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。  本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器...

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

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

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

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。, 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

    后端JAVA虚拟机JVM调优必备工具

    IBM Thread and Monitor Dump Analyzer for Java专业JVM调优工具 一、使用方法 1.使用java -jar启动程序 2.找到需要分析的jvm进程 3.使用jstack [pid] &gt; /tmp/sdapjvmlog.txt导出进程的详细日志 4.使用程序打开...

    实战JAVA虚拟机

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。, 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战java虚拟机

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战JAVA虚拟机__JVM故障诊断与性能优化.pdf

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    高级java笔试题-understanding-the-jvm:《深入理解Java虚拟机》阅读笔记

    《深入理解 Java 虚拟机》阅读笔记 本 repo 为《深入理解 Java 虚拟机 第2版》的阅读笔记,并对全书内容按照自己的理解进行了一定程度的整理。《深入理解 Java 虚拟机 第2版》原书主要分为了五个部分,这里仅对前四...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

    2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...

    实战Java虚拟机.pdf_java_

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    java虚拟机监控

    java 虚拟机监控,构建本地监控远程java虚拟机的visualvm应用,更加直观的分析java 应用的CPU、内存、堆/栈、线程等情况

    钻研JAVA虚拟机 全面掌握JVM JAVA虚拟机深入浅出实战课程 视频附带课程代码

    ├─(1) 0801_【掌握】JVM内存模型.mp4 ├─(2) 0802_【掌握】Java对象访问模式.mp4 ├─(3) 0803_【掌握】JIT即时编译器.mp4 ├─(4) 0804_【掌握】JVM堆内存结构.mp4 ├─(5) 0805_【掌握】新生代内存管理.mp4 ├...

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

    通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化

    很入理解JVM体系

    部分章节如下,内容在附件里面大家随意下载,欢迎讨论交流。 2.1、JVM相关概念 1、什么是JVM 2、JVM能运行哪些编程语言 ...2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile 加群:113035529 共同交流学习

    Java虚拟机监控方案.docx

     通过虚拟机内置的jstat指令获取内存各种堆和非堆的大小及其内存使用量  通过虚拟机内置jstack获取虚拟机线程的执行堆栈  统计、分析之后的数据封装为用于被监控数据对象,向各种渠道的数据观察者发送监控数据...

    JVM故障诊断与性能优化(实战JAVA虚拟机).7z

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。...

Global site tag (gtag.js) - Google Analytics