之前扯了四篇理论,这一篇终于可以动动手了。本篇我们将介绍JVM常用的一些工具,这些工具将是我们监控JVM状态、处理故障和调优分析的利器。 不过在开始之前,我还是要先车扯两句:工具终归只是帮助我们我们处理问题的,想要快速准确的解决问题,最为关键的还是对内在理论的理解和丰富的实践经验,所以如果对JVM的内存处理机制不了解,还是要用心学习一下。好了, 子曰:“工欲善其事,必先利其器。“,下边开始介绍。

一、JDK命令行工具

所有的java开发人员都知道JDK的bin目录下存放着编译java需要的javac,以及运行java程序需要的java这两个命令工具,但是很多人并没有注意到,其实除了这两个工具,该目录下还有很多工具,这些工具其实为我们提供了很多方便且强大的功能,以下是部分截图(各工具作用见:jdk/jre bin下工具介绍):

本篇我们只关注监控和故障处理相关的工具,见下表:

名称     作用
jps JVM Process Status Tool,现实指定系统内所有的HotSpot虚拟机进程 
jstats JVM Statistics Monitoring Tool,用于收集Hotspot虚拟机各个方面的运行参数 
jinfo Configuration Info for Java,现实虚拟机配置信息
jmap Memory map for java,生成虚拟机的内存转储快照
jhat JVM heap Dunp Browser,用于分析heapdump文件,他会建立一个HTTP/HTML服务,让用户可通过浏览器查看 
jstack Stack Track for java ,显示虚拟机线程快照

下边我们来看一下每个的简单用法:

1、jps

其实应该说这个命令多数人还是比较熟悉的,一般我们想要防止程序启动两次,或者判断某java进程是否存活,都会采用该命令获取系统当前运行的所有java进程,然后根据进程名判断。当然也可以以此获得对应进程的id(此id指JVM里的LVMID,但是他和系统进程ID是一致的),然后kill他来结束程序。其用法如下:

语法结构:
jsp [options] [hostid] 参数:
-q 只输出ID
-l 显示虚拟机执行的主类
-m 显示传给main的参数
-v 输出启动的JVM参数

2、jstat

jstat用于监控虚拟机各种运行状态信息,可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI的情况下他是性能分析的首选工具。

语法结构:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] 参数:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次 S0 — Heap上的 Survivor space 区已使用空间的百分比 列说明:
S1 — Heap上的 Survivor space 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

3、jinfo

这个命令可以实时查看调整JVM的运行参数,需要注意的是该工具仅在linux下比较有用,win下虽有提供,但是限制很大 ,使用方法如下:

语法结构:
jinfo [options] pid 参数:
-v 查看虚拟机显式参数
-flag[+/-] 查看所有参数,+/-可以添加/减少运行时参数
-sysprops 打印System.getProperties()的内容

4、jmap

jmap用于生成堆转储快照(heapdump,用于JVM内存状态分析,是故障处理或调优的关键参考数据),还可以查询finalize队列,java堆和永久代详细信息。此外,该工具同样在win下是个残废。

语法结构:
jmap [ option ] pid 参数:
-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.

5、jhat

通常与jmap搭配使用,用来分析jmap生成的heapdump文件,其内置了一个简单的HTTP服务器(哈哈,最近自己也在写一个web服务器,发现其实大体原理挺简单的,麻烦的在于对web应用接口、内部处理细节的设计,以及并发处理,目前已经实现一个简版,有兴趣的见:easy-httpserver),可以在浏览器中查看分析结果。实际上该工具用处不大,一方面其功能简单,比起常用的VisualVM等工具有一定差距,另一方面在生产环境中去进行比较耗资源的分析处理,估计对不少公司都是犯忌讳的事吧,一般都是把heapdump导到本地处理。
    这里就不介绍用法了,可自行谷歌里百度。

6、jstack

看名字就知道是和栈相关的,而栈里边存的则是各个线程的私有数据(局部变量表、方法出口、操作数栈、对象引用等),因此该命令就是用来生成当前虚拟机的线程快照的(threaddump,可用来分析虚拟机某线程长时间挺对的原因,如死锁、死循环、资源请求时间过长等)。

语法结构:
jstack [ option ] pid 参数:
-F当’jstack [-l] pid’没有相应的时候强制打印栈信息
-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有栈信息.
-h | -help打印帮助信息

二、JDK可视化工具

这一部分主要有两个工具:JConsole和VisualVM,这两个都提供了很强大的功能,这次先不介绍了,等下篇结合小例子分析吧。

似乎有点坑啊,困了,先睡了,最近心烦,等调整好继续^_^。

JVM学习总结五——性能监控及故障处理工具的更多相关文章

  1. 【JVM.3】虚拟机性能监控与故障处理工具

    一.概述 经过前面两章对于虚拟机内存分配与回收技术各方面的介绍,相信读者已经建立了一套比较完整的理论基础.理论总是作为指导实践的工具,能把这些执行应用到实际工作中才是我们的最终目的.接下来我们会从实践 ...

  2. 深入理解JVM(③)虚拟机性能监控、故障处理工具

    前言 JDK的bin目录中有一系列的小工具,除了java.exe.javac.exe这两个编译和运行Java程序外,还有打包.部署.签名.调试.监控.运维等各种场景都会用到这些小工具. 这些工具根据软 ...

  3. jvm性能监控与故障处理工具

    jdk为我们提供了一系列的jvm性能监控和故障处理工具,在这里根据学习进度进行整理记录.便于之后查阅 1.jps 虚拟机进程工具  类似于Linux系统中的ps命令,用于查看虚拟机进程,常用的有以下功 ...

  4. 第八章 JVM性能监控与故障处理工具(2)

    注意:该篇博客主要记录自<深入理解java虚拟机(第二版)> 说明:关于命令行的JVM性能监控与故障处理工具见<第七章 JVM性能监控与故障处理工具(1)> 1.图像化的故障处 ...

  5. JYM虚拟机性能监控与故障处理工具

    虚拟机性能监控与故障处理工具 一.jps:虚拟机进程状况工具 常用指令 二.jstat:虚拟机统计信息监视工具 常用指令 三.jinfo:配置信息工具 四.jmap:Java内存映像工具 常用指令 五 ...

  6. 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

    虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...

  7. java虚拟机之性能监控与故障处理工具

    sun jdk性能监控与故障处理工具 jps: 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一id. jstat: 用于监视虚拟机各种运行状态信息的命令航工具.它可 ...

  8. JVM(4) 虚拟机性能监控与故障处理工具

    1. Sun JDK 监控和故障处理工具 1)jps:JVM process Status Tool,显示指定系统内所有的HotSpot虚拟机进程.可以列出正在运行的虚拟机进程,并显示虚拟机执行主类( ...

  9. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

随机推荐

  1. 优秀的前端上传文件插件 web uploader

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  2. 用C++实现网络编程---抓取网络数据包的实现方法

    一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...

  3. Sql2008 php

    Sql2008支持php的擴展插件 http://www.microsoft.com/download/en/search.aspx?q=SQL+Server+for+PHP  全部 http://w ...

  4. ios9和ios10的新特性

    昨天面试了一个做ios开发的公司,其中面试官问我最新的ios系统版本是多少,以及它的特性是什么?由于自己是初学者,所以对这些没有关注过.今天特地搜索了一下关于ios9和ios10的新特性,并整理了一下 ...

  5. HTML中,按钮button与submit区别是什么?

    type=button 单纯是按钮功能:type=submit 是发送表单:既然是这样,那么能否全部用submit代替button? Sumit提交表单,Button需要绑定事件才可以用提交数据不可以 ...

  6. 【MVC】 文件及URL 的整理

    我们平时在做Asp.Net MVC(以下就简称mvc)项目的时候,页面文件结构都用了"/Views/Controllers/page.aspx",而把一些PartialView呢放 ...

  7. 【C++面试】常考题复习

    // CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <assert.h&g ...

  8. DOM 中 Property 和 Attribute 的区别

    原文地址:http://web.jobbole.com/83129/ property 和 attribute非常容易混淆,两个单词的中文翻译也都非常相近(property:属性,attribute: ...

  9. Unable to add App ID because the '10' App ID limit in '7' days has been exceeded.

    Unable to add App ID because the '10' App ID limit in '7' days has been exceeded. 官方的原因是对bundle iden ...

  10. ado.net工厂模式DbProviderFactories

    DbProviderFactory f = DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.Conne ...