转载: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. SSH项目中遇到的问题

    1. Struts has detected an unhandled exception: Messages: antlr.collections.AST.getLine()I File: org/ ...

  2. 洛谷P1565牛宫

    传送门:题目点这里; 首先理解题目,就是要求给定矩阵中权值和不小于零的最大子矩阵,数据范围200也还不算棘手,暴力n^4的算法也可以水到50分.正解要用到单调栈配合二分和前缀和,复杂度n^3logn, ...

  3. 关于oracle存储过程需要注意的问题

    在使用oracle存储过程时,有一些需要注意的地方,下面就来总结一下. 1.在oracle的存储过程中,数据表别名不能加as 也许是为了区分存储过程中的as,怕与过程中的as冲突. 如: select ...

  4. 【博弈论】【SG函数】【线段树】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem H. Cups and Beans

    一开始有n个杯子,每个杯子里有一些豆子,两个人轮流操作,每次只能将一个豆子移动到其所在杯子之前的某个杯子里,不过可以移动到的范围只有一段区间.问你是否先手必胜. 一个杯子里的豆子全都等价的,因为sg函 ...

  5. 【贪心】【堆】Gym - 101128C - Canvas Painting

    一些画布,每块有其大小,一开始都是白的,你任意将它们排序,然后一次操作可以选择一段连续的相同颜色的画布,从中任选一个位置,左侧涂上任意一种颜色,右侧涂上另一种.消耗是这一段画布的总的大小.问你要将所有 ...

  6. 【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye

    一个区域,垂直分成三块,每块有一个速度限制,问你从左下角跑到右上角的最短时间. 将区域看作三块折射率不同的介质,可以证明,按照光路跑时间最短. 于是可以二分第一个入射角,此时可以推出射到最右侧边界上的 ...

  7. 【后缀自动机】poj1509 Glass Beads

    字符串最小表示 后缀自动机 O(n) 把串复制一次,链接在后面之后,建立SAM,贪心地在SAM上转移,每次贪心地选择最小的字符,转移的长度为n时停止. 输出时由于要最靠前的,所以要在endpos集合中 ...

  8. 【高斯消元】BZOJ1013-[JSOI2008]球形空间产生器sphere

    [题目大意] 给出n维空间中给出n+1个点的坐标,求出球心坐标. [思路] 令球心坐标为x1,x2...xn,假设当前第i个点坐标为a1,a2...,an,第i+1个点坐标为b1,b2...,bn,则 ...

  9. 20162318 实验一《Java开发环境的熟悉》实验报告

    北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 成绩:2分 指导老师:娄老师.王老师 实验日期:2017年3月17日 实验密级:非密级 实验器 ...

  10. MySQL InnoDB引擎锁的总结

    为什么要锁 我们开的的各式各样系统中,系统运行需要CPU.内存.I/O.磁盘等等资源.但除了硬资源外,还有最为重要的软资源:数据. 当人们访问操作我们的系统时,其实归根是对数据的查看与生产.那么对于同 ...