`
墙头上一根草
  • 浏览: 154057 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

监控JVM工具

阅读更多

JDK内置工具使用

  • jps(Java Virtual Machine Process Status Tool)
        查看所有的jvm进程,包括进程ID,进程启动的路径等等。
  • jstack(Java Stack Trace)
        ① 观察jvm中当前所有线程的运行情况和线程当前状态。
        ② 系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
        ③ 系统hung住了?jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。
  • jstat(Java Virtual Machine Statistics Monitoring Tool)
        ① jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;
        监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。
  • jmap(Java Memory Map)
        监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;
  • jinfo(Java Configuration Info)
        观察进程运行环境参数,包括Java System属性和JVM命令行参数

 

具体命令使用:

  • jstat

    generalOption
    1 -help 显示帮助信息。
    2 -version 显示版本信息
    3 -options 显示统计选项列表。
    outputOptions 
    01 #参数:
    02     -class:统计类装载器的行为
    03     -compiler:统计HotSpot Just-in-Time编译器的行为
    04     -gc:统计堆各个分区的使用情况
    05     -gccapacity:统计新生区,老年区,permanent区的heap容量情况
    06     -gccause:统计最后一次gc和当前gc的原因
    07     -gcnew:统计gc时,新生代的情况
    08     -gcnewcapacity:统计新生代大小和空间
    09     -gcold:统计老年代和永久代的行为
    10     -gcoldcapacity:统计老年代大小
    11     -gcpermcapacity:统计永久代大小
    12     -gcutil:统计gc时,heap情况
    13     -printcompilation:HotSpot编译方法统计
    -class:
    01 #每隔1秒监控一次,一共做10次
    02   jstat -class 17970 1000 10
    03 ##########################################
    04 [root@lq225 conf]# jstat -class 2058 1000 10
    05 Loaded  Bytes  Unloaded  Bytes     Time   
    06   1697  3349.5        0     0.0       1.79
    07   1697  3349.5        0     0.0       1.79
    08   1697  3349.5        0     0.0       1.79
    09   1697  3349.5        0     0.0       1.79
    10   ...................................................
    11 ######################## 术语分隔符 ########################
    12 #Loaded 类加载数量
    13 #Bytes  加载的大小(k)
    14 #Unloaded 类卸载的数量
    15 #Bytes 卸载的大小(k)
    16 #Time 时间花费在执行类加载和卸载操作
    -compiler
    01 Compiled Failed Invalid   Time   FailedType FailedMethod
    02      302      0       0     1.27          0
    03 .....................................................
    04 ######################## 术语分隔符 ########################
    05 #Compiled 编译任务的执行次数
    06 #Failed   编译任务的失败次数
    07 #Invalid  编译任务无效的次数
    08 #Time     编译任务花费的时间
    09 #FailedType 最后一次编译错误的类型
    10 #FailedMethod 最后一次编译错误的类名和方法
    -gc:
    01 #每隔2秒监控一次,共20次
    02   jstat -gc 2058 2000 20
    03 ##############################
    04  S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT  
    05 8704.0 8704.0 805.5   0.0   69952.0  64174.5   174784.0    2644.5   16384.0 10426.7      2    0.034   0      0.000    0.034
    06 8704.0 8704.0 805.5   0.0   69952.0  64174.5   174784.0    2644.5   16384.0 10426.7      2    0.034   0      0.000    0.034
    07 8704.0 8704.0 805.5   0.0   69952.0  64174.5   174784.0    2644.5   16384.0 10426.7      2    0.034   0      0.000    0.034
    08 .............................................
    09 ######################## 术语分隔符 ########################
    10 #S0C 生还者区0 容量(KB)
    11 #S1C 生还者区1 容量(KB)
    12 #S0U 生还者区0 使用量(KB)
    13 #S1U 生还者区1 使用量(KB)
    14 #EC 伊甸园区容量(KB)
    15 #EU 伊甸园区使用量(KB) 
    16 #OC 老年区容量(KB)
    17 #OU 老年区使用量(KB)
    18 #PC 永久区容量(KB) 
    19 #PU 永久区使用量(KB)
    20 #YGC 新生代GC次数
    21 #YGCT 新生代GC时间
    22 #FGC full GC 事件的次数
    23 #FGCT full GC的时间 
    24 #GCT 总GC时间
    -gccapacity
    01 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
    02 131072.0 131072.0 131072.0 13056.0 13056.0 104960.0   393216.0   393216.0   393216.0   393216.0  65536.0  65536.0  65536.0  65536.0      1     0
    03 ..........................................................................................................
    04 ######################## 术语分隔符 ########################
    05 #NGCMN 最小新生代容量(KB)
    06 #NGCMX 最大新生代容量(KB)
    07 #NGC 当前新生代容量(KB)
    08 #S0C 当前生存者0区容量(KB)
    09 #S1C 当前生存者1区容量(KB)
    10 #OGCMN 老年代最小容量(KB)
    11 #OGCMX 老年代最大容量(KB)
    12 #OGC 当前老年代容量(KB).
    13 #OC 当前老年代?Current old space capacity (KB).
    14 #PGCMN 永久区最小容量(KB)
    15 #PGCMX 永久区最大容量(KB)
    16 #PGC 当前永久区容量(KB).
    17 #PC 当前永久区?Current Permanent space capacity (KB).
    18 #YGC young GC事件的次数
    19 #FGC Full GC次数
    -gccause
    01   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
    02   0.00  99.84  12.76   0.92  46.23      1    0.016     0    0.000    0.016 unknown GCCause      No GC
    03 ................................................
    04 ######################## 术语分隔符 ########################
    05 #S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
    06 #S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
    07 #E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
    08 #O old代已使用的占当前容量百分比
    09 #P perm代已使用的占当前容量百分比
    10 #YGC 从应用程序启动到采样时年轻代中gc次数
    11 #FGC 从应用程序启动到采样时old代(全gc)gc次数
    12 #FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
    13 #GCT 从应用程序启动到采样时gc用的总时间(s)
    14 #LGCC 最后一次GC的原因
    15 #GCC 当前GC的原因
    例如 -gcutil :        
    1 #每隔1秒监控一次,共10次
    2 jstat -gcutil 2058 1000 10
    3 ################################
    4 [root@lq225 conf]# jstat -gcutil 2058 1000 10
    5   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
    6   9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
    7   9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
    8   9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
    9   9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
  • jmap
    01 #参数
    02     -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
    03     -finalizerinfo 打印正等候回收的对象的信息.
    04     -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
    05     -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
    06     -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
    07     -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
    08     -h | -help 打印辅助信息
    09     -J 传递参数给jmap启动的jvm.
    10     pid 需要被打印配相信息的java进程id.
    例如 -histo :    
    1 jmap -histo  2058
    2 ############################
    3  num     #instances         #bytes  class name
    4 ----------------------------------------------
    5    1:           206        3585312  [I
    6    2:         19621        2791880  <constMethodKlass>
    7    3:         19621        2520048  <methodKlass>
    8    4:         21010        2251616  [C
    9 ............................................................
    例如 -dump:
    01 #生成的文件可以使用jhat工具进行分析,在OOM(内存溢出)时,分析大对象,非常有用
    02 jmap -dump:live,format=b,file=data.hprof 2058
    03  
    04 #通过使用如下参数启动JVM,也可以获取到dump文件:
    05  -XX:+HeapDumpOnOutOfMemoryError
    06  -XX:HeapDumpPath=./java_pid<pid>.hprof
    07  
    08 #如果在虚拟机中导出的heap信息文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题,可以这么做:
    09 jhat data.hprof 
    10 #执行成功后,访问http://localhost:7000即可查看内存信息。(首先把7000端口打开)
  • jinfo
    01 #查看java进程的配置信息
    02 jinfo 2058
    03 #####################
    04 Attaching to process ID 2058, please wait...
    05 Debugger attached successfully.
    06 Server compiler detected.
    07 JVM version is 24.0-b56
    08 Java System Properties:
    09  
    10 java.runtime.name = Java(TM) SE Runtime Environment
    11 project.name = Amoeba-MySQL
    12 java.vm.version = 24.0-b56
    13 sun.boot.library.path = /usr/local/java/jdk1.7/jre/lib/amd64
    14 ................................................
    15  
    16 #<span></span> 查看2058的MaxPerm大小可以用
    17  jinfo -flag MaxPermSize 2058
    18 ############################
    19 -XX:MaxPermSize=100663296
  • jps
    1 #列出系统中所有的java进程
    2   jps
    3 #######################
    4 2306 Bootstrap
    5 3370 Jps <span></span>2058 xxxxxxxxx<span></span>
    一些术语的中文解释
    01 S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
    02 S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
    03 S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
    04 S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
    05 EC:年轻代中Eden(伊甸园)的容量 (字节)
    06 EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
    07 OC:Old代的容量 (字节)
    08 OU:Old代目前已使用空间 (字节)
    09 PC:Perm(持久代)的容量 (字节)
    10 PU:Perm(持久代)目前已使用空间 (字节)
    11 YGC:从应用程序启动到采样时年轻代中gc次数
    12 YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
    13 FGC:从应用程序启动到采样时old代(全gc)gc次数
    14 FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
    15 GCT:从应用程序启动到采样时gc用的总时间(s)
    16 NGCMN:年轻代(young)中初始化(最小)的大小 (字节)
    17 NGCMX:年轻代(young)的最大容量 (字节)
    18 NGC:年轻代(young)中当前的容量 (字节)
    19 OGCMN:old代中初始化(最小)的大小 (字节)
    20 OGCMX:old代的最大容量 (字节)
    21 OGC:old代当前新生成的容量 (字节)
    22 PGCMN:perm代中初始化(最小)的大小 (字节)
    23 PGCMX:perm代的最大容量 (字节)  
    24 PGC:perm代当前新生成的容量 (字节)
    25 S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
    26 S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
    27 E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
    28 O:old代已使用的占当前容量百分比
    29 P:perm代已使用的占当前容量百分比
    30 S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
    31 S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
    32 ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
    33 DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)
    34 TT: 持有次数限制
    35 MTT : 最大持有次数限制

 

使用visualvm监控tomcat

  • 修改catalina.sh,添加下面一行:
    1 CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=192.168.55.255  -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    2  
    3 #注意点:
    4 #1、用hostname -i 查看是否为127.0.01,如果是,则必须配置-Djava.rmi.server.hostname为本机IP。
    5 #2、检查防火墙(iptables)是否开启,以及是否开放jmxremote.port所指定的端口。

     

     

    本文为转载,为了方便查阅,特将此编文章复制到一根草的下面,请包涵,转载地址为http://my.oschina.net/shking/blog/167566

分享到:
评论

相关推荐

    visualvm监控jvm及远程jvm监控方法

    通过以上步骤,开发者可以利用VisualVM有效地管理和监控JVM,及时发现并解决性能问题,提高Java应用的稳定性和效率。无论是本地还是远程,VisualVM都是一个强大且易用的JVM工具,值得在日常开发和调优工作中使用。

    JVM监控工具使用入门

    jvisualvm是一款功能更全面的JVM监控工具,它不仅能够监控JVM的状态,还可以进行垃圾回收管理、线程分析等功能。jvisualvm的界面友好,非常适合进行深入的性能分析工作。 **使用步骤:** 1. **启动jvisualvm**:...

    jvm监控工具介绍

    这些JVM监控工具提供了全面的洞察力,帮助开发者调试问题、优化性能和理解应用程序的行为。熟悉并掌握它们的使用,是Java开发和运维工作中的重要技能。在实际操作中,应根据具体情况选择合适的工具,以实现高效的...

    JVM 监控 调优 工具

    本文将深入探讨JVM内存结构、监控工具及其在调优和GC优化中的应用。 **JVM内存机构** JVM内存主要分为以下几个区域: 1. **堆内存(Heap)**:这是JVM中最大的一块内存区域,主要用于存储对象实例。堆被进一步...

    jvm内存监控工具使用

    ### JVM内存监控工具详解 #### 引言 Java Virtual Machine (JVM) 是运行 Java 应用程序的核心组件,其性能直接影响应用的响应速度和稳定性。JVM 的内存管理是性能优化的关键,尤其是在高并发环境下,合理的内存...

    精通Java监控:JVM监控工具的使用与实践

    Java虚拟机(JVM)监控工具是确保Java应用程序性能和稳定性的重要资源。这些工具可以帮助开发者监控和分析JVM的运行时状态,包括内存使用、垃圾回收行为、线程活动等关键指标。本文将详细介绍如何在Java中使用JVM...

    vmmap 观察jvm内存 监控jvm jvm线程

    本文将详细讲解如何利用`vmmap`监控JVM,理解其核心概念,以及分析JVM线程。 首先,`vmmap`是Apple提供的命令行工具,用于显示进程的虚拟内存映射。通过这个工具,我们可以查看JVM进程中的堆、栈、元空间、代码缓存...

    idea插件JVM内存工具JProfiler11

    IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...

    JVM监控实例数 windows监控 线程测试 单例模式下测试JVM实例是否一个

    本文将探讨如何在Windows环境下通过简单的命令行工具来监控JVM实例的数量,以及如何进行线程测试,特别是在单例模式下的JVM实例验证。 首先,了解如何监控JVM实例数量。在Windows操作系统中,我们可以使用`jps`命令...

    JVM监控工具介绍

    jstat是一个命令行工具,可以实时监控JVM的资源使用情况,如堆内存使用、GC活动等。 **主要功能:** - 监控classloader行为 (`-class`)。 - 监控编译行为 (`-compile`)。 - 监控GC活动 (`-gc`)。 - 显示不同区域的...

    JVM分析工具

    例如,首先使用`jstat`监控JVM的实时状态,发现可能的性能问题后,用`jmap`生成heap dump,最后借助MAT进行深入的内存分析。通过这种方式,开发者可以找出内存泄漏、优化内存分配、改进垃圾收集效率,进而提升Java...

    JAVA JVM性能调优监控工具详解

    ### JAVA JVM性能调优监控工具详解 在Java开发过程中,特别是在企业级应用中,经常会遇到各种性能瓶颈问题,如内存溢出(`OutOfMemoryError`)、内存泄露、线程死锁、锁争用等问题。这些问题如果不能及时有效地解决...

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

    Java提供了一系列内置工具,方便开发者监控JVM运行状态。以下是对这些工具的详细介绍: 1. **jps(Java Process Status)** `jps`命令是Java的一个实用工具,类似于Linux的`ps`命令,用于查看当前系统中运行的Java...

    arthas阿里的开源jvm监控工具

    arthas阿里的开源jvm监控工具,可以用于JVM的调优,快速生成JVM的运行图,方便开发,具体可见阿里的git

    hpjmeter jvm gc监控工具

    【标题】"hpjmeter jvm gc监控工具"是一个专门用于监视Java虚拟机(JVM)内存管理和垃圾收集(GC)行为的实用程序。HPjmeter由惠普公司开发,它提供了一种可视化的方式来理解JVM性能,特别是与垃圾收集相关的活动。...

    jvm监控工具visualVM

    VisualVM是一款强大的JVM(Java Virtual Machine)监控和性能分析工具,由Oracle公司开发并提供。它集成在Java SDK中,默认位于%JAVA_HOME%\bin目录下,方便开发者直接使用。这款工具提供了丰富的功能,帮助Java...

    jvisualvm来JVM监控

    jvisualvm是一款强大的、免费的Java应用程序性能分析工具,它允许开发者深入洞察JVM的行为,进行内存分析、线程监控、CPU性能剖析等。本文将详细探讨如何利用jvisualvm来进行有效的JVM监控。 一、jvisualvm简介 ...

    JVM调优工具命令详解.pdf

    通过JVM自带的jvisualvm工具,可以远程连接并监控JVM的实时状态,包括检测死锁。jvisualvm是一个功能强大的Java监控和故障排查工具,它能够提供图形界面来执行JVM的各项监控和调优操作。文档中给出了配置JMX端口的...

    JVM监控工具,用来怎么提高JAVA的效率

    例如,VisualVM是Oracle提供的一款强大的多合一JVM工具,它包含了丰富的功能,如内存分析、线程监控、类加载统计以及CPU和GC(垃圾收集)性能监视等。 1. **线程监控**:在Java应用中,线程是执行任务的基本单位。...

Global site tag (gtag.js) - Google Analytics