转载:http://blog.csdn.net/top_code/article/details/51456186

当系统出bug需要定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里所说的数据包括:运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文件),堆转储快照(heapdump/hprof文件)等。使用适当的虚拟机监控和分析工具可以加快我们分析数据、定位问题的速度。

JDK的命令行工具

JDK本身提供了很多方便的JVM性能监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具。它们在JDK的bin目录之下:

1.jps

说明

jps(JVM Process Status Tool)用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。

命令格式

> jps [options] [hostid]
  • 1

jps常用options如下表:

选项 作用
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是jar,输出jar路径
-v 输出虚拟机进程启动时JVM参数

示例

> jps -l
  • 1

2.jstat

说明

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机中的类装载、内存、垃圾收集、JIT编译等运行数据。

命令格式

> jstat [option vmid [interval count]]
  • 1

参数说明

  • option – 选项,代表用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况。
  • vmid – VM的进程号,即当前运行的java进程号
  • interval – 间隔时间,单位为秒或者毫秒
  • count – 打印次数,如果缺省则打印无数次

jstat 常用option 如下表:

选项 作用
-class 监视类装载、卸载数量、总空间以及装载类所耗费的时间
-gc 监视java堆状况,包括Eden区、两个Survivor区、年老代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大、最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold 监视老年代GC状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity 输出永久代使用到的最大、最小空间
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译器编译的方法

输出内容含义如下: 
S0 – Heap上的 Survivor space 0 区已使用空间的百分比

S1 – Heap上的 Survivor space 1 区已使用空间的百分比

E – Heap上的 Eden space 区已使用空间的百分比

O – Heap上的 Old space 区已使用空间的百分比

P – Perm space 区已使用空间的百分比

YGC – 从应用程序启动到采样时发生 Young GC 的次数

YGCT – 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

FGC – 从应用程序启动到采样时发生 Full GC 的次数

FGCT – 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

GCT – 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

示例

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。如下:

[root@localhost bin]# jstat -gcutil 25444
  • 1

每500毫秒查询一次进程25444 垃圾收集状况,一共查询10次,如下:

[root@localhost bin]# jstat -gcutil 25444 500 10
  • 1
[root@localhost bin]# jstat -gcnewcapacity 25444 
  • 1
[root@localhost bin]# jstat -gcold 25444 
  • 1

jstat -class pid:显示加载class的数量,及所占空间等信息。

[root@localhost bin]# jstat -class 25444 
  • 1

jstat -compiler pid:显示VM实时编译的数量等信息。

[root@localhost bin]# jstat -compiler 25444 
  • 1

3.jinfo

说明

jinfo(Configuration Info for Java)可观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数;也可从core文件里面知道崩溃的Java应用程序的配置信息。

命令格式

> jinfo [option] pid
  • 1

示例

4.jmap

说明

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。

命令格式

jmap [option] vmid
  • 1

option选项如下表所示:

选项 作用
-heap 显示jvm heap详细信息
-histo 显示jvm heap中对象统计信息,包括类,实例数量,合计容量
-dump 生成Java堆转储快照。格式为:-dump:[live],format=b,file=filename,其中live子参数说明是否只dump出存活的对象

示例

观察到java heap的内存使用情况

[root@localhost bin]# jmap -heap 2083
  • 1

观察heap中所有对象的情况,包括对象数量和所占空间大

[root@localhost bin]# jmap -histo 2083 
  • 1
[root@localhost bin]# jmap -histo:live 2083
  • 1

dump出所有对象文件可用于进一步分析

[root@localhost bin]# jmap -dump:format=b,file=heap.bin 2083 
  • 1

dump出存活的对象文件可用于进一步分析

[root@localhost bin]# jmap -dump:live,format=b,file=heap.bin 2083
  • 1

5.jstack

说明

jstack (Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump)。线程快照就是当前虚拟机内每一条线程正在执行的的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间的死锁、死循环、请求外部资源导致的长时间等待 等都是导致线程长时间停顿的原因。

命令格式

> jstack [option] vmid
  • 1

option选项如下表所示:

选项 作用
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示关于锁的附加信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈

JVM性能监控工具(一)-jdk命令行工具的更多相关文章

  1. JVM性能监控与故障处理命令行工具

    JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...

  2. JVM-JDK命令行工具

    JDK命令行工具 当我们进入JDK的安装目录里面的/bin目录,会发现有很多小工具,有我们熟悉的也经常用的java,javac,也有很多我们不怎么用到很陌生的工具.下面看看哪些平时不怎么用到的工具吧. ...

  3. jdk命令行工具(一)

    1.概述 熟悉java开发的人应该都知道在jdk的bin目录下有许多的工具,这些工具主要用于监视虚拟机和故障处理.这些故障处理工具被Sun公司称作为“礼物”附赠给JDK的使用者,并在软件的使用说明中把 ...

  4. 监控Linux性能的18个命令行工具

    监控 Linux 性能的 18 个命令行工具 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐 认识到监控和保 ...

  5. JVM调优前戏之JDK命令行工具---jhat

    在JDK的命令行中,一般开发人员最耳熟能详的肯定就是java,javac,javap等常用命令,不过在jdk/bin下还有许多其他的命令行工具,它们被用来监测JVM运行时的状态,下面我们来详细解读一下 ...

  6. JVM调优前戏之JDK命令行工具---jstack

    在JDK的命令行中,一般开发人员最耳熟能详的肯定就是java,javac,javap等常用命令,不过在jdk/bin下还有许多其他的命令行工具,它们被用来监测JVM运行时的状态,下面我们来详细解读一下 ...

  7. 监控 Linux 性能的 18 个命令行工具

    http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance 1.Top-Linux进程监控 Lin ...

  8. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  9. 监控 Linux 性能的 18 个命令行工具[转]

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...

随机推荐

  1. bzoj 1444 AC自动机 + 矩阵乘法 | 高斯消元

    恶补了一下AC自动机,花了一天时间终于全部搞明白了. 思路:将每个人的串加入AC自动机,在AC自动机生成的状态图上建边,注意单词末尾的节点只能转移到自己概率为1, 然后将矩阵自乘几十次后误差就很小了, ...

  2. 搭建openstack系统初始化(2)

    操作系统环境 :Centos 7.3 x64 1).安装需要的包 yum install wget vim chrony net-tools bash-completion -y 2)配置阿里elpl ...

  3. sonarQube安装及本机扫描C#项目

    因项目需要,需要使用sonarQube对代码进行扫描并查看,因对sonarQube不熟悉,所以先在本机搭建测试环境. 参考了张老师的博客:http://www.cnblogs.com/danzhang ...

  4. 转:LLVM与Clang的概述及关系

    转:http://www.cnblogs.com/saintlas/p/5738739.html      LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言 ...

  5. Linux操作命令(五)

    find . -name ”*.c" -exec ./command.sh {} \; 本次实验将介绍 Linux 命令中 find 和 xargs 命令的用法. find xargs 1. ...

  6. STL容器 -- Priority_Queue

    核心:和队列相似,但优先队列中的 “下一个元素” 指的是 “优先级最高” 的元素. 头文件:#include<queue> 普通类型的构造方法: priority_queue<int ...

  7. 循序渐进PYTHON3(十三) --2-- DJANGO之FORM表单(自动生成HTML标签和自定制提示信息)

    在上一次的代码上做出进一步修改,使之能在页面上显示自定制的报错信息,并且使用form自动创建标签的功能. views.py from django.shortcuts import render,Ht ...

  8. CSS3选择器、低版本解决方案及各浏览器私有前缀

    一.基本选择器 通配选择器:* 元素选择器:div.p… ID选择器:#id 类选择器:.className 群组选择器:选择器1,选择器2 主流浏览器全部支持 二.层次选择器 后代选择器: div ...

  9. Line Reflection -- LeetCode

    Given n points on a 2D plane, find if there is such a line parallel to y-axis that reflect the given ...

  10. 【Splay】bzoj3224 Tyvj 1728 普通平衡树

    #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> us ...