zoukankan      html  css  js  c++  java
  • 【转】JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat, jvisualvm

    【From】 https://blog.csdn.net/kobejayandy/article/details/12890669

    一、jps

    1、介绍

    用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。与unix上的ps类似,用来显示本地有权限的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。使用jps时,不需要传递进程号做为参数。
    Jps也可以显示远程系统上的JAVA进程,这需要远程服务上开启了jstat服务,以及RMI注及服务,不过常用都是对本对的JAVA进程的查看。


    2、命令格式

    jps [ options ] [ hostid ]


    3、常用参数说明

    -m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
    -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
    -v 输出传给JVM的参数。

    二、jstat

    1、介绍

    Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。由于JVM内存设置较大,图中百分比变化不太明显一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

    jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。
    它主要是用来显示GC及PermGen相关的信息,否则其中即使你会使用jstat这个命令,你也看不懂它的输出。


    2、命令格式

    jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]


    3、参数说明

    1)generalOption:单个的常用的命令行选项,如-help, -options, 或 -version。
    2)outputOptions:一个或多个输出选项,由单个的statOption选项组件,可以-t, -h, and -J选项配合使用。

    statOption:
    -class Option
    -compiler Option
    -gc Option
    -gccapacity Option
    -gccause Option
    -gcnew Option
    -gcnewcapacity Option
    -gcold Option
    -gcoldcapacity Option
    -gcpermcapacity Option
    -gcutil Option
    -printcompilation Option

    注:其中最常用的就是-gcutil选项了,因为他能够给我们展示大致的GC信息。


    Option:指的是vmid、显示间隔时间及间隔次数等
    vmid    — VM的进程号,即当前运行的java进程号
    interval– 间隔时间,单位为秒或者毫秒
    count   — 打印次数,如果缺省则打印无数次


    3)jstat命令输出参数说明

    S0  — Heap上的 Survivor space 0 区已使用空间的百分比
    S0C:S0当前容量的大小
    S0U:S0已经使用的大小
    S1  — Heap上的 Survivor space 1 区已使用空间的百分比
    S1C:S1当前容量的大小
    S1U:S1已经使用的大小
    E   — Heap上的 Eden space 区已使用空间的百分比
    EC:Eden space当前容量的大小
    EU:Eden space已经使用的大小
    O   — Heap上的 Old space 区已使用空间的百分比
    OC:Old space当前容量的大小
    OU:Old space已经使用的大小
    P   — Perm space 区已使用空间的百分比
    OC:Perm space当前容量的大小
    OU:Perm space已经使用的大小
    YGC — 从应用程序启动到采样时发生 Young GC 的次数
    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
    FGC — 从应用程序启动到采样时发生 Full GC 的次数
    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
    GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC
    注:由于该工具参数过多,不再进行给出测试结果。


    三、jstack

    1、介绍

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:
    jstack [-l] pid
    如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。

    2、命令格式

    jstack [ option ] pid
    jstack [ option ] executable core
    jstack [ option ] [server-id@]remote-hostname-or-IP

    3、常用参数说明

    1) options: 
    executable Java executable from which the core dump was produced.
    (可能是产生core dump的java可执行程序)
    core 将被打印信息的core dump文件
    remote-hostname-or-IP 远程debug服务的主机名或ip
    server-id 唯一id,假如一台主机上多个远程debug服务 


    2)基本参数:
    -F当’jstack [-l] pid’没有相应的时候强制打印栈信息
    -l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
    -m打印java和native c/c++框架的所有栈信息.
    -h | -help打印帮助信息
    pid 需要被打印配置信息的java进程id,可以用jps查询.

    四、jmap

    1、介绍

    打印出某个java进程(使用pid)内存内的,所有对象的情况(如:产生那些对象,及其数量)。
    可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。jmap -dump:format=b,file=outfile 3024可以将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具(Memory Analysis Tool)或与jhat (Java Heap Analysis Tool)一起使用,能够以图像的形式直观的展示当前内存是否有问题。
    64位机上使用需要使用如下方式:
    jmap -J-d64 -heap pid

    2、命令格式

    SYNOPSIS
    jmap [ option ] pid
    jmap [ option ] executable core
    jmap [ option ] [server-id@]remote-hostname-or-IP

    3、参数说明

    1) options: 
    executable Java executable from which the core dump was produced.
    (可能是产生core dump的java可执行程序)
    core 将被打印信息的core dump文件
    remote-hostname-or-IP 远程debug服务的主机名或ip
    server-id 唯一id,假如一台主机上多个远程debug服务 


    2)基本参数:
    -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,创业与打工的区别 - 博文预览,可以用jps查问.
    注:平时该命令我是使用最多的。

    五、jinfo

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

    六、jconsole 和 jvisualvm

    jconsole: 一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。命令行里打 jconsole,选则进程就可以了。

    需要注意的就是在运行jconsole之前,必须要先设置环境变量DISPLAY,否则会报错误,Linux下设置环境变量如下:
    export DISPLAY=:0.0


    jvisualvm 同jconsole都是一个基于图形化界面的、可以查看本地及远程的JAVA GUI监控工具,Jvisualvm同jconsole的使用方式一样,直接在命令行打入Jvisualvm即可启动,不过Jvisualvm相比,界面更美观一些,数据更实时。

    七、Jhat

    jhat用于对JAVA heap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析,如LINUX上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题,不过jhat和MAT比较起来,就没有MAT那么直观了,MAT是以图形界面的方式展现结果。


    八、Jdb

    用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。现在应该说日常的开发中很少用到JDB了,因为现在的IDE已经帮我们封装好了,如使用ECLIPSE调用程序就是非常方便的,只要在非常特定的情况下可能会用到这个命令,如远程服务器的维护,没有IDE进行调试,那这个时候JDB应该可以帮上忙。

     
  • 相关阅读:
    08测试环境配置_数据库配置
    11等价类
    15状态迁移
    12边界值分析法
    10用例格式
    python的转义字符和原字符
    13数据分析法
    14正交试验
    python软件安装
    cookie的secure属性
  • 原文地址:https://www.cnblogs.com/pekkle/p/12592061.html
Copyright © 2011-2022 走看看