转载: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. 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇

    一.独立验证器 我上篇中我将AndCompositeValidator和OrCompositeValidator归为独立验证器,这2个验证器主要是为了第一类验证服务,可以进行多种验证组合在一起进行复杂 ...

  2. 五十五 网络编程 UDP编程

    TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包.但是,能不 ...

  3. Openstack 云主机深入了解 (十六)

    一)云主机深入了解 1.云主机在计算节点以进程方式运行 2.监听vnc的端口,vnc默认端口从5900开始, 多台云主机,端口递增 3.云主机桥接网卡,与宿主机联通网络 提示:在openstack环境 ...

  4. ubuntu安装过程记录

    [DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su  输入管理員密碼,或去 ...

  5. 干净地发布QT程序

    原文请看:http://www.cnblogs.com/DrizzleX/articles/2475044.html 本文研究这样一个问题:使用QT SDK和VS2008开发了一个程序,将这个程序放到 ...

  6. ajax向php传参数对数据库操作

    刚入门php,要求要对多用户进行批量删除(当然实际中是不可能的),在这就以此为例. 大意就是通过对数据库中用户查询,将用户信息显示在页面表格中,在进行多项选择后将所选行参数通过ajax传入后台php文 ...

  7. 剑指offer-判断是否是平衡二叉树

    private boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { height(root); ...

  8. 第5天:Ansible-Playbook

    Ansible中的每个模块专注于某一方面的功能.虽然每个模块实现的功能都比较简单,但是,将各个模块结合起来就可以实现比较复杂的功能.在Ansible中,将各个模块组合起来的文件是一个YAML格式的配置 ...

  9. 进入bios后没有usb启动项怎么办

    开机按DEL进入BIOS(现在还这么说吧,不同的主板进入方法不太一样),找到BOOT选项. 选择Boot mood:legacy support(引导模式,逻辑支持) boot priorty:leg ...

  10. bzoj 4430: [Nwerc2015]Guessing Camels赌骆驼

    4430: [Nwerc2015]Guessing Camels赌骆 Description Jaap, Jan, and Thijs are on a trip to the desert afte ...