在 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] [[email protected]]<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] [[email protected]]<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] [[email protected]]<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 虚拟机
时间: 2025-01-15 09:53:28

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

tomcat9 点击bin目录下的startup.bat一闪而过

我装的是tomcat9免安装版,jdk版本是11,之后去tomcat bin目录下点击startup.bat闪退(好吧,只有想办法解决了) 博客中的解决办法五花八门,什么环境变量没配好....不过都不适合我.(提一句:jdk11没有自动生成jre,需要你自己搞) 正文: 在tomcat 的bin文件下找到startup.bat ,右击编辑在最下方加上pause,同时将call "%EXECUTABLE%" start %CMD_LINE_ARGS% 改为call "%EXEC

2个问题,解决tomcat启动一闪而过和运行tomcat/bin目录下的startup.bat时报错(the CATALINA_HOME environment variable is not defined correctly)

1.除手动使用开始菜单自启动或者程序启动TOMCAT时TOMCAT一闪而过,这时候是发生了错误,这时候我们打开BIN目录下的“startup.bat”文件,编辑,在结尾添加pause命名,这样在CMD下执行startup.bat时就会出错停止,这时候我们就知道是什么错误了. 2.运行tomcat/bin目录下的startup.bat时报错:the CATALINA_HOME environment variable is not defined correctly 碰到这个问题时的第一反应是添加

基础才是重中之重~网站bin目录下的程序集自动加载

回到目录 网站bin目录下的程序集一般由系统项目,项目引用的外部DLL及外挂DLL组成,它们在网站运行时会自动加载,这一点很重要,项目本身DLL及项目引入的DLL会自动加载,这没有问题,而外挂在bin目录的DLL也会自动加载,这很重要,因为,它可以使我们的应用程序更加灵活,在开发通用功能上,也显得扩展性更强! 一个例子,比如一个HttpModule,它是一个通用的功能,向页面添加一些缓存过期的共用信息,这对于你所有网站都是共用的,这时,可以建立一个HttpModule项目,它代码可能是这样 na

Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

后来我发现在eclipse的Preferences -> Android -> Build中有一项“Skip packaging and dexing until export or launch....”,原来这个选项默认是被勾选的,这个选项的意思是“跳过packing和dexing,直到export或者 launch...”,去掉这个选项即可解决问题. Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

生成解决方案,主项目的bin目录下没有其他项目生成的dll

问题说明: 我的项目组成: 主项目为:TaskUtlity 在生成解决方案的时候在TaskUtlity的bin目录下老是找不到ProBonus项目生成的dll. 解决方案: 1.打开sln文件,找到ProBonus项目的GUID. Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskUtility.ProBonus", "TaskUtility.ProBonus\TaskUtility.ProB

Java实现列出目录下所有文件和文件夹

1 package com.filetest; 2 3 import java.io.File; 4 import java.util.Scanner; 5 6 public class fileview { 7 8 public static void main(String args[]){ 9 10 view(); //调用查看文件列表函数 11 12 } 13 14 private static void view() { 15 16 Scanner scanner=new Scanne

JDK/bin目录下的不同exe文件的用途(转)

新安装完JDk 大家是否发现安装目录的bin文件夹有很多exe文件 下面就为大家讲解不同exe文件的用途 javac:Java编译器,将Java源代码换成字节代 java:Java解释器,直接从类文件执行Java应用程序代码 appletviewer(小程序浏览器):一种执行HTML文件上的Java小程序类的Java浏览器 javadoc:根据Java源代码及其说明语句生成的HTML文档 jdb:Java调试器,可以逐行地执行程序.设置断点和检查变量 javah:产生可以调用Java过程的C过程

JDK/bin目录下的不同exe文件的用途

安装完JDK,大家是否发现安装目录的bin文件夹有很多exe文件.下面就为大家介绍一下不同exe文件的用途. javac:Java编译器,将Java源代码换成字节代. java:Java解释器,直接从类文件执行Java应用程序代码. appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序类的Java浏览器 javadoc:根据Java源代码及其说明语句生成的HTML文档. jdb:Java调试器,可以逐行地执行程序.设置断点和检查变量. javah:产生可以调用Java过

java读取某个目录下所有文件并通过el表达式将相关文件信息展示出来,js提供页面搜索及查看下载功能

从服务器上读取某个目录下的文件  将文件名 文件修改日期   及文件 大小展示在前台  并可以查看及下载 第一步:读取文件目录下的文件,并将文件按时间由大到小排列 public ArrayList<File> getLogs() { // TODO Auto-generated method stub ArrayList<File>  tomcatLogs = new ArrayList<File>(); File path = new File(""