Linux ---> 监控JVM工具
shking
shking

发布时间: 2013/10/10 01:27 阅读: 2642 收藏: 26 点赞: 1 评论: 0

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

-help 显示帮助信息。
    -version 显示版本信息
    -options 显示统计选项列表。

outputOptions

#参数:
        -class:统计类装载器的行为
        -compiler:统计HotSpot Just-in-Time编译器的行为
        -gc:统计堆各个分区的使用情况
        -gccapacity:统计新生区,老年区,permanent区的heap容量情况
        -gccause:统计最后一次gc和当前gc的原因
        -gcnew:统计gc时,新生代的情况
        -gcnewcapacity:统计新生代大小和空间
        -gcold:统计老年代和永久代的行为
        -gcoldcapacity:统计老年代大小
        -gcpermcapacity:统计永久代大小
        -gcutil:统计gc时,heap情况
        -printcompilation:HotSpot编译方法统计

-class:

#每隔1秒监控一次,一共做10次
      jstat -class 17970 1000 10
    ##########################################
    [root@lq225 conf]# jstat -class 2058 1000 10
    Loaded  Bytes  Unloaded  Bytes     Time   
      1697  3349.5        0     0.0       1.79
      1697  3349.5        0     0.0       1.79
      1697  3349.5        0     0.0       1.79
      1697  3349.5        0     0.0       1.79
      ...................................................
    ######################## 术语分隔符 ########################
    #Loaded 类加载数量
    #Bytes  加载的大小(k)
    #Unloaded 类卸载的数量
    #Bytes 卸载的大小(k)
    #Time 时间花费在执行类加载和卸载操作

-compiler

Compiled Failed Invalid   Time   FailedType FailedMethod
         302      0       0     1.27          0
    .....................................................
    ######################## 术语分隔符 ########################
    #Compiled 编译任务的执行次数
    #Failed   编译任务的失败次数
    #Invalid  编译任务无效的次数
    #Time     编译任务花费的时间
    #FailedType 最后一次编译错误的类型
    #FailedMethod 最后一次编译错误的类名和方法

-gc:

#每隔2秒监控一次,共20次
      jstat -gc 2058 2000 20
    ##############################
     S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT   
    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
    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
    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
    .............................................
    ######################## 术语分隔符 ########################
    #S0C 生还者区0 容量(KB)
    #S1C 生还者区1 容量(KB)
    #S0U 生还者区0 使用量(KB)
    #S1U 生还者区1 使用量(KB)
    #EC 伊甸园区容量(KB)
    #EU 伊甸园区使用量(KB)
    #OC 老年区容量(KB)
    #OU 老年区使用量(KB)
    #PC 永久区容量(KB)
    #PU 永久区使用量(KB)
    #YGC 新生代GC次数
    #YGCT 新生代GC时间
    #FGC full GC 事件的次数
    #FGCT full GC的时间
    #GCT 总GC时间

-gccapacity

NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC
    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
    ..........................................................................................................
    ######################## 术语分隔符 ########################
    #NGCMN 最小新生代容量(KB)
    #NGCMX 最大新生代容量(KB)
    #NGC 当前新生代容量(KB)
    #S0C 当前生存者0区容量(KB)
    #S1C 当前生存者1区容量(KB)
    #OGCMN 老年代最小容量(KB)
    #OGCMX 老年代最大容量(KB)
    #OGC 当前老年代容量(KB).
    #OC 当前老年代?Current old space capacity (KB).
    #PGCMN 永久区最小容量(KB)
    #PGCMX 永久区最大容量(KB)
    #PGC 当前永久区容量(KB).
    #PC 当前永久区?Current Permanent space capacity (KB).
    #YGC young GC事件的次数
    #FGC Full GC次数

-gccause

S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
      0.00  99.84  12.76   0.92  46.23      1    0.016     0    0.000    0.016 unknown GCCause      No GC
    ................................................
    ######################## 术语分隔符 ########################
    #S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
    #S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
    #E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
    #O old代已使用的占当前容量百分比
    #P perm代已使用的占当前容量百分比
    #YGC 从应用程序启动到采样时年轻代中gc次数
    #FGC 从应用程序启动到采样时old代(全gc)gc次数
    #FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
    #GCT 从应用程序启动到采样时gc用的总时间(s)
    #LGCC 最后一次GC的原因
    #GCC 当前GC的原因

例如 -gcutil :

#每隔1秒监控一次,共10次
    jstat -gcutil 2058 1000 10
    ################################
    [root@lq225 conf]# jstat -gcutil 2058 1000 10
      S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
      9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
      9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
      9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034
      9.25   0.00  96.73   1.51  63.64      2    0.034     0    0.000    0.034

jmap

#参数
        -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
        -finalizerinfo 打印正等候回收的对象的信息.
        -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
        -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
        -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
        -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
        -h | -help 打印辅助信息
        -J 传递参数给jmap启动的jvm.
        pid 需要被打印配相信息的java进程id.

例如 -histo :

jmap -histo  2058
    ############################
     num     #instances         #bytes  class name
    ----------------------------------------------
       1:           206        3585312  [I
       2:         19621        2791880  <constMethodKlass>
       3:         19621        2520048  <methodKlass>
       4:         21010        2251616  [C
    ............................................................

例如 -dump:

#生成的文件可以使用jhat工具进行分析,在OOM(内存溢出)时,分析大对象,非常有用
    jmap -dump:live,format=b,file=data.hprof 2058

#通过使用如下参数启动JVM,也可以获取到dump文件:
     -XX:+HeapDumpOnOutOfMemoryError
     -XX:HeapDumpPath=./java_pid<pid>.hprof

#如果在虚拟机中导出的heap信息文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题,可以这么做:
    jhat data.hprof  
    #执行成功后,访问http://localhost:7000即可查看内存信息。(首先把7000端口打开)

jinfo

#查看java进程的配置信息
    jinfo 2058
    #####################
    Attaching to process ID 2058, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 24.0-b56
    Java System Properties:

java.runtime.name = Java(TM) SE Runtime Environment
    project.name = Amoeba-MySQL
    java.vm.version = 24.0-b56
    sun.boot.library.path = /usr/local/java/jdk1.7/jre/lib/amd64
    ................................................

# 查看2058的MaxPerm大小可以用
     jinfo -flag MaxPermSize 2058
    ############################
    -XX:MaxPermSize=100663296

jps

#列出系统中所有的java进程
      jps
    #######################
    2306 Bootstrap
    3370 Jps 2058 xxxxxxxxx

一些术语的中文解释

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 : 最大持有次数限制

使用visualvm监控tomcat

修改catalina.sh,添加下面一行:

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"

#注意点:
    #1、用hostname -i 查看是否为127.0.01,如果是,则必须配置-Djava.rmi.server.hostname为本机IP。
    #2、检查防火墙(iptables)是否开启,以及是否开放jmxremote.port所指定的端口。

Linux ---> 监控JVM工具的更多相关文章

  1. jProfiler远程连接Linux监控jvm、tomcat运行状态

    第一步.下载软件 官网地址:https://www.ej-technologies.com/download/jprofiler/files , Mac客户端 GUI界面 Linux服务端 第二步.安 ...

  2. jProfiler远程连接Linux监控jvm的运行状态

    第一步:下载软件官网地址:https://www.ej-technologies.com/download/jprofiler/files,下载一个linux服务端,一个windows客户端 GUI界 ...

  3. linux下监控jvm 使用的方法

    之前一直用jconsole监控jvm,图形界面简单易用,最近因为需要在纯linux下进行操作,所以总结了一下 linux下监控jvm的例子,这次主要用到了jstat工具, 各个参数意义: jstat ...

  4. linux系统监控常用工具

    linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...

  5. Jstatd方式远程监控Linux下 JVM运行情况

    前言 最近一个项目部署在服务器上运行时出现了问题,经过排查发现是java内存溢出的问题,所以为了实时监控服务器java内存的情况,需要远程查看服务器上JVM内存的一些情况.另外服务器系统是CentOS ...

  6. Linux系统监控实用工具Glances

    Linux系统监控实用工具Glances Glances安装 Glances安装要求:python >= 2.6 和 psutil >= 0.4.1 1.第一步,安装了python-> ...

  7. UAVStack JVM监控分析工具:图形化展示采集及分析监控数据

    摘要:UAVStack推出的JVM监控分析工具提供基于页面的展现方式,以图形化的方式展示采集到的监控数据:同时提供JVM基本参数获取.内存dump.线程分析.内存分配采样和热点方法分析等功能. 引言 ...

  8. 常见的监控JVM的几个Linux命令和使用

    jps [root@xxx bin]# jps -l 2007bash: jps: command not found [root@xxx bin]# /opt/jdk1.8.0_181/bin/jp ...

  9. 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警

     概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...

随机推荐

  1. windows如何获取Win10 Win8 Win8.1版本

    GetVersionEx 在win8 win8.1 win10 之后已经无法使用,如果非要使用的话需要让exe嵌入manifest,mainfest如下.这个文件需要已utf-8存储. <?xm ...

  2. Java 工厂模式学习

    工厂模式分三种:简单工厂.工厂方法.抽象工厂.其中抽象工厂是用于多个产品族的情况.所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖.打个比方,一台电脑有CPU.主板.内存和硬盘等,这些不同 ...

  3. ecshop开发日志之虚拟商品发送邮件通知

    购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...

  4. PHP利用递归法获取多级类别的树状数组

    数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...

  5. hdu 5649 DZY Loves Sorting 二分+线段树

    题目链接 给一个序列, 两种操作, 一种是将[l, r]里所有数升序排列, 一种是降序排列. 所有操作完了之后, 问你a[k]等于多少. 真心是涨见识了这题..好厉害. 因为最后只询问一个位置, 所以 ...

  6. [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...

  7. OSG坐标系统

    1.世界坐标         世界坐标系描述的是整个场景中所有的对象,可以理解为绝对坐标系,所有对象的位置都是绝对坐标.从整体上考虑,它为所有对象的位置提供一个绝对的参考标准,从而避免了物体之间由于独 ...

  8. 致命错误C0000034正在应用更新操作37解决方法

    当碰到这个问题的时候关闭电脑,启动,不断按F8键,进入命令行,输入Notepad.exe弹出记事本,文件,打开,所有文件,然后将C:\Windows\WinSxS目录下的pending.xml文件中的 ...

  9. 偷懒的inline-block解决方法

    最近这几天看了inline-block的用法,用它来代替浮动实现水平排列很不错,只是要解决一下浏览器兼容和间隙的问题.关于ie6,7的兼容问题 <inline-block 前世今生>(ht ...

  10. 如何在程序中动态设置墙纸(使用IActiveDesktop接口)

    大家都知道设置WINDOWS桌面墙纸的WIN32 API是SystemParametersInfo, 使用SPI_SETDESKWALLPAPER参数便能设置墙纸: ::SystemParameter ...