转载: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. gulp配合vue压缩代码格式化

    实际项目就是一个单页面.因此,我觉得用gulp足够,并且不需要webpack和vue-cli因为没有必要使用组件. 先来说一下项目结构 1. 然后来看看我的包管理package.json都用了啥,你也 ...

  2. C++中正确使用PRId64

    http://blog.csdn.net/win_lin/article/details/7912693

  3. Python和xml简介

    python提供越来越多的技术来支持xml,本文旨在面向初学利用Python处理xml的读者,以教程的形式介绍一些基本的xml出来概念.前提是读者必须知道一些xml常用术语. 先决条件 本文所有的例子 ...

  4. java之异常

    package com.text.exception; class Test{ void add(int a,int b) throws Exception { int c; c=a/b; Syste ...

  5. 关于php的session.serialize_handler的问题

    前言 php的session信息是储存在文件中的 session.save_path="" 指定储存的路径 session.save_handler="" 指定 ...

  6. Struts2 简单的上传文件并且显示图片

    代码结构: UploadAction.java package com.action; import java.io.File; import java.io.FileInputStream; imp ...

  7. ZSTU OJ 4272 最佳淘汰算法

    线段树. 处理出每个位置下一个位置是哪里.然后搞个线段树找一下最大值就可以了. #include<map> #include<set> #include<ctime> ...

  8. PIE.htc的使用

    文件下载:http://css3pie.com/download/ 使用: .pie_radius{ width:200px; height:200px; background-color:red; ...

  9. javascrip 求最大公因数(分解质数法)发生的问题

    //这是求一个数的质因数,例如:12=2*2*3 其中2,3都是质数.function primeArray(n, array) { array = new Array(); for (var i = ...

  10. BZOJ 3391 [Usaco2004 Dec]Tree Cutting网络破坏(树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3391 [题目大意] 给定一棵树,求分支size均不大于一半点数的点 [题解] 递归的同 ...