文档章节

在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。

科技创造
 科技创造
发布于 2015/06/16 10:02
字数 1528
阅读 537
收藏 12
点赞 0
评论 0

在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。



名称


作用



jps JVM process status tool,显示指定系统内所有的 HotSpot 虚拟机进程 

jstat JVM statistics monitoring tool,用于收集 HotSpot 虚拟机各方面的运行数据 

jinfo 显示虚拟机配置信息 

jmap 生产虚拟机的内存快照 dump 文件 

jhat 分析 dump 文件 

jstack 显示虚拟机的线程快照 


jps 虚拟机进程状况工具


jps 的命令格式:


jps [options] [hostid]




1

2

3

4

5

6

7

 

>jps -l

25330 sun.tools.jps.Jps

25296

 

>jps -lv

25356 sun.tools.jps.Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home -Xms8m

25296  -Dosgi.requiredJavaVersion=1.6 -XstartOnFirstThread -Dorg.<span class="wp_keywordlink"><a href="http://res.importnew.com/eclipse" title="Eclipse ImportNew主页" target="_blank">Eclipse</a></span>.swt.internal.carbon.smallFonts -XX:MaxPermSize=256m -Xms40m -Xmx512m -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts

 


jps 可以查看通过 rmi 协议查询开启了 rmi 服务的原创虚拟机进程状态,hostid 是 rmi 注册表中注册的主机。


jps 有如下主要的选项:



选项


作用



-q 只输出 LVMID,省略主类的名称 

-m 输出虚拟机启动时候传递给 main 方法的参数 

-l 输出类的全名 

-v 输出虚拟机进程启动时 JVM 参数 


jstat 虚拟机统计信息监视工具


jstat 可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、 JIT 编译等运行数据。


jstat 的命令格式:


jstat [option vmid [interval] [count]]


例如:




1

2

3

4

5

6

7

 

>jstat -gcutil 25296 1000 5

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT

  0.00  99.54  90.43  93.70  95.23     55    1.156     5    1.990    3.146

  0.00  99.54  90.43  93.70  95.23     55    1.156     5    1.990    3.146

  0.00  99.54  90.43  93.70  95.23     55    1.156     5    1.990    3.146

  0.00  99.54  90.43  93.70  95.23     55    1.156     5    1.990    3.146

  0.00  99.54  90.43  93.70  95.23     55    1.156     5    1.990    3.146

 


查询 25296 进程的虚拟机状况,并且每隔 1000 毫秒一次,显示 5 次。


看下主要选项的含义:



选项


作用



-class 监视类装载、卸载数量、总看见以及类装载消耗的时间 

-gc 监视 java 堆状况,包括 eden 区、两个 survivor 区、年老代、永久代等的容量、已用空间、gc 时间合计等 

-gccapacity 内容与 -gc 基本相同,输出主要关注 java 堆各个区使用到的最大、最小空间 

-gcutil 内容与 -gc 基本相同,关注已使用区域占总空间的百分比 

-gccause 内容与 -gcutil 一样,并且多输出导致上一次 gc 产生的原因 

-gcnew 监视新生代状况 

-gcnewcapacity 与 -gcnew 相同,主要关注使用到的最大、最小空间 

-compiler 输出 JIT 编译器编译过的方法、耗时等信息 


下面解读下 -gcutil 所产生的内容:


S0、S1 分别代表了 Survivor0 和 Survivor1,E 代表 Eden 区,O 代表老年区, P 代表永久代。YGC 代表 Young GC 的次数,YGCT 代表时间,后面一样解释。


jinfo 查看 java 配置信息工具


这个命令比较简单,直接看自带的描述:




1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

Usage:

    jinfo [option] <pid>

        (to connect to running process)

    jinfo [option] <executable <core>

        (to connect to a core file)

    jinfo [option] [server_id@]<remote server IP or hostname>

        (to connect to remote debug server)

 

where <option> is one of:

    -flag <name>         to print the value of the named VM flag

    -flag [+|-]<name>    to enable or disable the named VM flag

    -flag <name>=<value> to set the named VM flag to the given value

    -flags               to print VM flags

    -sysprops            to print Java system properties

    <no option>          to print both of the above

    -h | -help           to print this help message

 


jmap 生产 java 内存 dump


jmap 除了可以生成 dump 文件外,还可以查询 finalize 执行队列,java 堆和永久代的详细信息,如空间使用率和当前用的是哪种收集器等。


具体的 jamp 如何操作部多介绍,看下面提供的说明,比较简单:




1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

 

Usage:

    jmap [option] <pid>

        (to connect to running process)

    jmap [option] <executable <core>

        (to connect to a core file)

    jmap [option] [server_id@]<remote server IP or hostname>

        (to connect to remote debug server)

 

where <option> is one of:

    <none>               to print same info as Solaris pmap

    -heap                to print java heap summary

    -histo[:live]        to print histogram of java object heap; if the "live"

                         suboption is specified, only count live objects

    -permstat            to print permanent generation statistics

    -finalizerinfo       to print information on objects awaiting finalization

    -dump:<dump-options> to dump java heap in hprof binary format

                         dump-options:

                           live         dump only live objects; if not specified,

                                        all objects in the heap are dumped.

                           format=b     binary format

                           file=<file>  dump heap to <file>

                         Example: jmap -dump:live,format=b,file=heap.bin <pid>

    -F                   force. Use with -dump:<dump-options> <pid> or -histo

                         to force a heap dump or histogram when <pid> does not

                         respond. The "live" suboption is not supported

                         in this mode.

    -h | -help           to print this help message

    -J<flag>             to pass <flag> directly to the runtime system

 


jhat 虚拟机堆快照分析工具


我们可以使用 jhat 来分析 jmap 生成的 dump 文件




1

2

3

4

5

6

7

8

9

10

11

12

13

 

>jhat tmp.dump

Reading from tmp.dump...

Dump file created Sat May 09 17:10:52 CST 2015

Snapshot read, resolving...

Resolving 0 objects...

WARNING:  hprof file does not include java.lang.Class!

WARNING:  hprof file does not include java.lang.String!

WARNING:  hprof file does not include java.lang.ClassLoader!

Chasing references, expect 0 dots

Eliminating duplicate references

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

 


默认会开 7000 端口进行 web 访问。一般不使用这个命令来分析,会使用专业的工具来分析 dump 文件,如 eclipse memory analyzer 等。


jstack 分析 java 堆栈


jstack 用来生成当前时刻线程快照。


使用方式如下:




1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 

Usage:

    jstack [-l] <pid>

        (to connect to running process)

    jstack -F [-m] [-l] <pid>

        (to connect to a hung process)

    jstack [-m] [-l] <executable> <core>

        (to connect to a core file)

    jstack [-m] [-l] [server_id@]<remote server IP or hostname>

        (to connect to a remote debug server)

 

Options:

    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)

    -m  to print both java and native frames (mixed mode)

    -l  long listing. Prints additional information about locks

    -h or -help to print this help message

 


【参考资料】

1.深入理解 JAVA 虚拟机


© 著作权归作者所有

共有 人打赏支持
科技创造
粉丝 36
博文 197
码字总数 174505
作品 0
徐汇
程序员
JVM学习总结五——性能监控及故障处理工具

之前扯了四篇理论,这一篇终于可以动动手了。本篇我们将介绍JVM常用的一些工具,这些工具将是我们监控JVM状态、处理故障和调优分析的利器。 不过在开始之前,我还是要先车扯两句:工具终归只...

oO脾气不坏Oo
2014/03/16
0
0
JDK 1.7 基本概念和目录结构

参考资料: http://blog.csdn.net/kindazrael/article/details/7270673 http://docs.oracle.com/javase/7/docs/index.html JDK and JRE File Structure http://docs.oracle.com/javase/7/doc......

jack688
06/26
0
0
《深入理解Java虚拟机》——JDK自带命令行工具

给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储...

戴的天
2014/08/19
0
1
JVM内存监控:visualVM jconsole jstatd jmap

转载的一篇文章,但是对文章做了一些补充,以便看到这篇文章的同学能配置成功。 本文是亲自测试的详细配置过程,不是转载而且linux下不需修改/etc/hosts文件 由于在建项目的需要,监控tomca...

小天120
2014/03/11
0
0
java虚拟机内存监控工具jps,jinfo,Jstack,jstat,jmap,jhat使用

基于Sun HotSpot JVM 这里将介绍几款sun hotspot jvm 自带的监控工具: 请确保java_home/bin配置到path环境变量下,因为这些工具都在jdk的bin目录下 jps(JVM Process Status Tool):JVM机进程...

我类个擦
2014/09/12
0
1
java学习从入门到精通(原创)--精华

作者:robbin 网址:http://www.fankai.com/ Java Learning Path (一)、工具篇 一、 JDK (Java Development Kit) JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),...

精华之王
2009/04/11
0
0
《Java从小白到大牛精简版》之第2章 开发环境搭建

《Java从小白到大牛》纸质版已经上架了!! 《论语魏灵公》曰:“工欲善其事,必先利其器”,做好一件事,准备工作非常重要。在开始学习Java技术之前,先介绍如何搭建Java开发环境是非常重要...

tony关东升
06/26
0
0
编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting
06/15
0
0
1.4.1 下载和安装java 7的jdk

JDK的全称是 java SE Development Kit,即 java标准版开发包,是Sun提供的一套用于开发java 应用程序的开发包,它提供了编译、运行 java程序所需的各种工具和资源,包括java编译器,java运行...

Gooiem
2015/08/18
0
0
win10下java的jdk安装和环境变量配置

首先需要去JAVA官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html 下载的是jdk 9 与以往的环境配置不一样 jdk是java的核心 是java软件的开...

codingcoge
03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

sklearn学习笔记之简单线性回归

简单线性回归 线性回归是数据挖掘中的基础算法之一,从某种意义上来说,在学习函数的时候已经开始接触线性回归了,只不过那时候并没有涉及到误差项。线性回归的思想其实就是解一组方程,得到...

wangxuwei
9分钟前
0
0
feign之动态interceptor(二)

背景 上文提到了按照不同的feignClient可以根据多个不同的key来进行多个不同的bean的配置 那么我们如何完成多个interceptor的配置呢? 分析 我们刚提到多个配置的玄机就在FeignClientProper...

Mr_Qi
11分钟前
1
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
36分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
56分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
今天
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
3
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部