JDK 自带监控和故障处理工具

jdk 自带监控工具 Jconsole 介绍与使用 我们在测试java项目的需要对应用程序的资源消耗和性能指标进行监控,特别是进行性能测试的时候,监控尤为重要。点击一个线程在线程列表的名称,显示该线程的信息的权利,包括线程的名称,状态、阻塞和等待的次数、堆栈跟踪。它可以监控本地的jvm,也可以监控远程的jvm,也可以同时监控几个jvm。在选项卡底部的详细信息部分显示类的加载,因为Java虚拟机开始的总数,当前加载和卸载的数量。概览选项卡中显示CPU使用率,堆内存使用率,线程数,Java VM中加载的类的监控信息。图表曲线加载的类的数量随着时间的推移。 阅读详情

1. jps

jps - 列出目标操作系统上检测到的Java虚拟机(JVM)进程。此命令是实验性的,不受支持。

1.1 语法

jps [options] [hostid]

options: 详见下文 OPTIONS 部分。
hostid:hostid 需要生成进程报告的主机标识符(ip, hostname)。hostid可以包括可选组件,这些组件指示通信协议、端口和其他特定于实现的数据。详见下文 HOST IDENTIFIER 部分。

1.2 描述

jps 命令列出目标系统上检测到的Java HotSpot虚拟机(进程)。该命令仅限于报告它具有访问权限的JVM的信息。
如果在不指定hostid的情况下运行jps命令,那么它将在本地主机上搜索检测JVM。如果以一个hostid开头,那么它将使用指定的协议和端口在指定的主机上搜索JVM(进程)。假设目标主机上运行一个jstatd进程。
jps 命令为目标系统上找到的每个检测JVM报告本地JVM标识符或lvmid。lvmid通常(但不一定)是JVM进程的操作系统进程标识符(进程号)。再没有选项的情况下,jps列出每个Java应用程序的lvmid,后面跟着应用程序的类名或jar文件名的缩写形式。类名或JAR文件名的缩写形式省略了类的包信息或JAR文件路径信息。
jps命令使用Java启动器 查找传递给主方法的类名或参数。如果目标JVM是用自定义启动器启动的,那么类或JAR文件名和主方法的参数是不可用的。再这种情况下,jps命令输出字符串Unknown作为类名或JAR文件名以及主方法的参数。
jps命令生成jvm列表可以根据授权运行该命令的主题的权限来限制。该命令只列出原则具有访问权限的jvm,由特定于操作系统的访问控制机制决定。

1.3 OPTIONS - 选项

jps 命令支持许多修改命令输出的选项。这些选项将来可能会更改或删除。

  • -q : 禁止传递给主方法的类名、JAR文件名、参数的输出,只产生一个本地JVM标识符(进程号)列表;
  • -m : 显式传递给主方法的参数。对于嵌入式JVM,输出可能为空;
  • -l (常用) : 显式应用程序主类的完整包名或应用程序JAR文件的完整路径名;
  • -v (常用) : 显式传递给JVM的参数;
  • -V : 禁止传递给主方法的类名、JAR文件名和参数的输出,只产生一个本地JVM标识符(进程号)列表;

1.4 HOST IDENTIFIER - 主机标识

主机标识符或称为hostid,是指示目标系统的字符串。hostid字符串的语法对应于URI的语法:

[protocol:][[//]hostname][:port][/servername]
  • protocol : 通信协议。如果省略协议并且没有指定主机名,则默认协议是特定于平台的优化本地协议。如果省略协议并指定主机名,则默认协议为 rmi;
  • hostname : 指示目标主机的主机名或IP地址。如果省略hostname参数,那么目标主机就是本地主机;
  • port : 用于与远程服务器通信的默认端口。如果省略了主机名参数或协议参数指定了优化的本地协议,则忽略端口参数。否则,端口参数的处理是特定于实现的。对于默认的rmi协议,port参数表示远程主机上rmiregistry的端口号。如果省略port参数,且protocol参数为rmi,则使用默认的rmiregistry端口(1099);
  • servername : 这个参数的处理取决于实现。对于优化的本地协议,该字段将被忽略。对于rmi协议,该参数是一个字符串,标识远程主机上rmi远程对象的名称。更多信息情参见jstatd命令 -noption 。

1.5 OUTPUT FORMAT - 输出格式

jps 命令的输出模式如下所示:

lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]

所有输出标记都由空格分隔。当试图将参数映射到实际位置参数时,包含嵌入空白的 arg 值会导致歧义。
注意:建议不要编写脚本来解析jps输出,因为格式在未来版本中可能会改变。如果你写脚本解析JPS输出,然后期望在此工具的未来版本中修改他们。

1.6 EXAMPLES - 示例

示例1:

$ jpss
6545 Jps
5611 ASMain

image.png
第一列:Java 应用程序在操作系统上的进程号(通常情况下)
第二列:Java 应用程序主类类名

示例2:

$ jps -l
5611 com.bes.enterprise.startup.ASMain
6636 sun.tools.jps.Jps

image.png

示例3:

jps -v

image.png

2. jinfo

jinfo - 生成Java应用程序配置信息。此命令是实现性的,不受支持。

2.1 语法

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [servier-id ] remote-hostname-or-IP
  • option : 请参见 OPTIONS 部分;
  • pid :打印配置信息的进程号。该进程必须是Java进程。要获得机器上运行Java进程列表,请使用 jps 命令;
  • executable :从中生成核心转储的Java可执行文件;
  • core :要为其打印配置信息的核心文件;
  • remote-hostname-or-IP :远程调试服务器主机名或IP地址;
  • server-id :一个可选的唯一ID,当多个调试服务器在同一远程主机上运行时使用。

2.2 DESCRIPTION - 描述

jinfo 命令打印指定Java进程或核心文件或远程调试服务器的Java配置信息。配置信息包括Java系统属性和Java虚拟机(JVM)命令行标志。如果指定的进程运行在64位JVM上,那么你可能需要指定-J-d64选项,例如: jinfo -J-d64 -sysprops pid。
此实用程序不受支持,并且可能在JDK的未来版本中不可用。在不存在dbgeng.dll的windows系统中,必须安装用于windows的调试工具才能使用这些工具工作。PATH环境变量应该包含目标进程使用的jvm.dll的位置,或者生成崩溃转储文件的位置。例如,设置: PATH=%JDK_HOME%\jre\bin\client;%PATH%

2.3 OPTIONS - 选项

  • -flag name : 打印指定命令行标志的名称和值;
  • -flag [+|-]name : 启用或禁用指定的布尔命令行标志;
  • -flag name=value : 将指定的命令行标志设置为指定的值;
  • -flags : 打印传递给JVM的命令行标志;
  • -sysprops : 以键值对的形式打印Java系统属性;
  • -h : 打印帮助信息;
  • -help: 打印帮助信息;

2.4 EXAMPLES - 示例

示例1:

$ jps
8473 Jps
5611
ASMain
$ jinfo 5611

image.png

3. jstat

jstat - 监视Java虚拟机(JVM)统计信息。此命令是实验性的,不受支持。

3.1 语法

jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]
  • generalOption : 一个通用的命令行选项 -help 或 -options。参见 General Options 部分;
  • outputOptions : 由单个statOption和-t、-h和-J选项组成的一个或多个输出选项。参见 Output Options;
  • vmid : 虚拟机标识符(进程号),它是指示目标JVM的字符串。一般语法如下:
    • [protocol:][//]lvmid[@hostname[:port]/servername]
    • vmid 自妇产的语法对应于URI的语法。vmid字符串可以是表示本地JVM的简单整数,也可以是指定通信协议、端口号和其他特定于实现的值的更复杂结构。请参见虚拟机标识符;
  • interval [s|ms] : 采样间隔,单位为秒(s)或毫秒(ms)。默认单位为毫秒。必须是正整数。指定后,jstat命令在每个间隔产生输出;
  • count : 要显式的采样数量。默认值为无穷大,这将导致jstat命令显示统计信息,直到JVM终止或jstat命令终止。该值必须为正整数。

3.2 描述

jstat 命令用来显示测试 Java HotSpot 虚拟机的性能统计信息。目标JVM由其虚拟机标识符或vmid选项标识。

  • 虚拟机标识符:vmid字符串的语法对应于URI的语法:
    • [protocol:][//]lvmid[@hostname[:port]/servername]
  • protocol : 通信协议。如果省略protocol值且未指定主机名,则默认协议是特定于平台的优化本地协议。如果省略协议值,并指定主机名,则默认协议为 rmi;
  • lvmid : 目标JVM的本地虚拟机标识符。lvmid是一个特定于平台的值,用于唯一表示系统上的JVM。lvmid是虚拟机标识符的唯一必须组件。lvmid通常是(但不一定是)目标JVM进程的操作系统进程标识符。可以使用jsp命令确定lvmid。此外,还可以在Solaris、Linux和OS X平台上使用ps命令确定lvmid,再windows上使用windows任务管理器确定lvmid;
  • hostname : 指定目标主机的主机名或IP地址。如果省略hostname值,则目标主机为本地主机;
  • port : 用于与远程服务器通信的默认端口。如果省略了主机名值或协议值指定了优化的本地协议,则忽略端口值。否则,端口参数的处理是特定于实现的。对于默认的rmi协议,port值表示远程主机上rmiregistry的端口号。如果省略port值,protocol值为rmi,则使用默认的rmiregistry端口号(1099);
  • servername :servername 参数的处理取决于实现。对于优化后的本地协议,该字段将被忽略。对于rmi协议,它表示远程主机上rmi远程对象的名称。

3.3 选项

jstat 命令支持两种类型的选项,通用选项和输出选项。常规选项使jstat命令显示简单的用法和版本信息。输出选项决定统计输出的内容和格式。
所有选项及其功能都可能在未来的版本中更改或删除。

  • 通用选项:如果指定一个通用选项,则不能指定任何其他选项或参数。
    • -help :显式帮助信息;
    • -options :显式静态选项列表。参见输出选项。
  • 输出选项: 如果你没有指定通用选项,那么你可以指定输出选项。输出选项决定了jstat命令输出的内容和格式,由单个statOption加上任何其他输出选项(-h、-t、-J)组成。statOption必须先出现。输出格式为表,列之间用空格分隔。带有标题的标题行描述列。使用 -h 选项可以设置显示标头的频率。列标题名称在不同选项之间是一致的。通常,如果两个选项提供同名的列,则这两个列的数据源是相同的。使用-t选项显示时间戳列,将Timestamp标记为输出的第一列。Timestatmp列包含自目标JVM启动以来经过的时间(以秒为单位)。时间戳的分辨率取决于各种因素,并且由于重载系统上延迟的线程调度而发生变化。使用interval和count参数分别确定jstat命令显示其输出的频率和次数。

注意 :不要编写脚本来解析jstat命令的输出,因为格式在未来的版本中可能会改变。如果你编写了解析jstat命令输出的脚本,那么你可以在此工具的未来版本中修改它们。

  • -statOption :确定jstat命令显示的统计信息。下面列出了可用的选项。使用 -options general 选项显示特定平台安装的选项列表。参见统计选项和输出。

class :显式类加载器行为的统计信息。
compiler :显式Java HotSpot VM即时编译器的行为统计信息。
gc :显式垃圾收集堆行为的统计信息。
gccapacity :显式各分代及其对应空间的容量统计信息。
gccause :显式关于垃圾收集统计信息的摘要(与 -gcutil相同),包括最后一次和当前(如果适用)垃圾收集事件的原因。
gcnew :显式年轻代的行为统计信息。
gcnewcapacity :显式关于新生代的大小及其对应空间的统计信息。
gcold :显式关于老年代行为和元空间统计信息的统计信息。
gcoldcapacity :显式关于老年代大小的统计信息。
gcmetacapacity :显式元空间大小的统计信息。
gcutil :显式关于垃圾收集统计信息的摘要。
printcompilation :显式Java HotSpot虚拟机编译方法统计信息。

  • -h n :每 n 个样本(输出行)显式一个列标题,其中 n 为正整数。默认值为 0,将列标头显式在数据的第一行。
  • -t :将时间戳列显示为输出的第一列。时间戳是目标JVM开始时间之后的时间。
  • -JjavaOption :将 javaOption 传递给Java应用程序启动器。例如,-J-Xms48m将启动内存设置为48mb。
  • **Stat Options and Output **:下面的信息总结了 jstat 命令为每个 statOption输出的列。
    • -class option :类加载器统计信息。

Loaded :已加载的类数量
Bytes :加载的 kb 数
Unloaded :卸载的类数量
Bytes :卸载的Kbytes数
Time :执行类加载和卸载操作所花费的时间

  • -compiler option :Java HotSpot VM 即时编译器统计信息。

Compiled :已执行的编译任务数
Failed :编译任务失败的个数
Invalid :无效的编译任务数
Time :用于执行编译任务的时间
FailedType :上次编译失败的编译类型
FailedMethod :上次失败编译的类名和方法

  • gc option :垃圾收集的堆统计信息。

    S0C :当前幸存者空间 0 容量(kB)
    S1C :当前幸存者空间 1 容量(kB)
    S0U :幸存者空间 0 利用率(kB)
    S1U :幸存者空间 1 利用率(kB)
    EC :当前伊甸园空间容量(kB)
    EU :伊甸园空间利用率(kB)
    OC :当前老年代容量(kB)
    OU :老年代空间利用率(kB)
    MC :元空间容量(kB)
    MU :元空间利用率(kB)
    CCSC :压缩类空间容量(kB)
    CCSU :使用的压缩类空间(kB)
    YGC :年轻代垃圾收集事件的数量
    YGCT :年轻代垃圾收集时间
    FGC :FullGC事件数
    FGCT :FullGC垃圾收集时间
    GCT :总垃圾收集时间

  • gccapacity option :内存分代和空间容量。

    NGCMIN :年轻代最小容量(kB)
    NGCMX:年轻代最大容量(kB)
    NGC :当前年轻代容量(kB)
    S0C :当前幸存者空间0容量(kB)
    S1C :当前幸存者空间1容量(kB)
    EC :当前伊甸园空间容量(kB)
    OGCMIN : 最小老年代容量(kB)
    OGCMX :最大老年代容量(kB)
    OGC :当前老年代容量(kB)
    OC :当前老年代空间容量(kB)
    MCMN :最小元空间容量(kB)
    MCMX :最大元空间容量(kB)
    MC :元空间容量(kB)
    CCSMN :压缩类空间最小容量(kB)
    CCSMX :压缩类空间最大容量(kB)
    CCSC :压缩类空间容量(kB)
    YGC :年轻代GC事件的数量
    FGC :FullGC事件数

  • -gccause option :此选项实现与 -gcutil 选项相同的垃圾收集统计信息摘要,但包括上一个垃圾收集事件和当前垃圾收集事件(如果适用)的原因。除了为 -gcutil 列出的列之外,该选项还添加了以下列。

    LGCC :上次垃圾收集的原因
    GCC :当前垃圾收集的原因

  • -gcnew option :年轻代的统计数据。

    S0C :当前幸存者空间0容量(kB)
    S1C :当前幸存者空间1容量(kB)
    S0U :幸存者空间0利用率(kB)
    S1U :幸存者空间1利用率(kB)
    TT :Tenuring threshold
    MTT :Maximum tenuring threshold
    DSS :期望幸存者空间大小(kB)
    EC :当前伊甸园空间容量(kB)
    EU :伊甸园空间利用率(kB)
    YGC :年轻代GC事件的数量
    YGCT :年轻代垃圾收集时间

  • gcnewcapacity option :年轻代空间大小统计

    NGCMN :最小年轻代容量(kB)
    NGCMX :最大年轻代容量(kB)
    NGC :当前的年轻代容量(kB)
    S0CMX :最大幸存者空间0容量(kB)
    S1C :当前幸存者空间1容量(kB)
    ECMX :最大伊甸园空间容量(kB)
    EC :当前伊甸园空间容量(kB)
    YGC :年轻代 GC 事件数量
    FGC :FullGC 事件数量

  • gcold option :老年代和元空间行为统计。

    MC :元空间容量(kB)
    MU :元空间利用率(kB)
    CCSC :压缩类空间容量(kB)
    CCSU :使用的压缩类空间(kB)
    OC :当前老年代空间容量(kB)
    OU :老年代利用率(kB)
    YGC :年轻代GC事件的数量
    FGC :FullGC事件数量
    FGCT :FullGC垃圾收集时间
    GCT :总垃圾收集时间

  • gcoldcapacity option :老年代大小统计。

    OGCMN :最小老年代容量(kB)
    OGCMX :最大老年代容量(kB)
    OGC :当前老年代容量(kB)
    OC :当前老年代空间容量(kB)
    YGC :年轻代GC事件的数量
    FGC :FullGC事件数
    FGCT :FullGC垃圾收集时间
    GCT :总垃圾收集时间

  • gcmetacapacity option :元空间大小统计信息。

    MCMN :最小元空间容量(kB)
    MCMX :最大元空间容量(kB)
    MC :元空间容量(kB)
    CCSMN :压缩类空间最小容量(kB)
    CCSMX :压缩类空间最大容量(kB)
    YGC :年轻代GC事件的数量
    FGC :FullGC事件数量
    FGCT :FullGC垃圾收集时间
    GCT :总垃圾收集时间

  • gcutil option :垃圾收集统计信息的摘要。

    S0 :幸存者空间0利用率占空间当前容量的百分比
    S1 :幸存者空间1的利用率占空间当前容量的百分比
    E :伊甸园空间利用率占空间当前容量的百分比
    O :老年代利用率占空间当前容量的百分比
    M :元空间利用率占空间当前容量的百分比
    CCS :压缩类空间利用率的百分比
    YGC :年轻代GC事件的数量
    YGCT :年轻代垃圾收集时间
    FGC :FullGC事件数
    FTCT :FullGC垃圾收集时间
    GCT :总垃圾收集时间

  • -printcompilation option :Java HotSpot VM 编译方法统计。

    Compiled :最近编译的方法执行的编译任务数
    Size :最近编译的方法的字节码的字节数
    Type :最近编译的方法的编译类型
    Method :类名和方法名,用于标识最近编译的方法。类名使用斜杠(/)而不是点(.)作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与HotSpot -XX:+PrintCompilation选项一致。

3.4 示例

示例1:

$ jps
5611 ASMain
14494 Jps
$ jstat -gccause -h 10 5611 1s

image.png

4. jstack

jstack - 打印Java进程、core file 或远程调试服务器的Java线程堆栈跟踪。此命令是实验性的,不收支持。

4.1 语法

jstack [ options ] pid
jstack [ options ] executable core
jstack [ options ] [ server-id@ ] remote-hostname-or-IP

options : 参见 Options 部分;
pid :为其打印堆栈跟踪的进程ID。该进程必须是Java进程。要获得机器上运行的Java进程列表,请使用jps命令;
executable :生成核心转储的Java可执行文件;
core :要为其打印堆栈跟踪的核心文件;
remote-hostname-or-IP :远程调试服务器主机名或IP地址;
server-id :一个可选的唯一ID,当多个调试服务器在同一远程主机上运行时使用。

4.2 描述

jstack 命令打印指定Java进程、corefile或远程调试服务器的Java线程的Java堆栈跟踪。对于每个Java帧,打印完整的雷鸣、方法名字、字节码索引(BCI)和行号(如果可用的话)。使用 -m 选项,jstack命令使用程序计数器(PC)打印所有线程的Java和本机帧。对于每个本机帧,在可用时打印最接近PC的本机符号。C++ 中被破坏的名称是不需要的。要要求C名称,此命令的输出可以通过管道传输到C++ filt。当指定的进程运行在64位Java虚拟机上时,你可能需要指定 -J-d64选项,例如:jstack -J-d64 -m pid。
注意 :此程序不受支持,在JDK的未来版本中可能无法使用。在不存在dbgeng.dll文件的Windows系统中,必须安装用于Windows的调试工具,以便这些工具能够工作。PATH环境变量需要包含目标进程使用的jvm.dll的位置,或者生成崩溃转储文件的位置。例如:
set PATH=\jre\bin\client;%PATH%

4.3 选项

注意:在混合模式堆栈跟踪中,-m 选项不能用于远程调试服务器。

4.4 示例

示例1:

$ jps
4864 mqpaas-pproxy-bootstrap.jar
45824 Jps
4977 mqpaas-cproxy-bootstrap.jar
6872 BrokerStartup
3452 mqpaas-portal-bootstrap.jar
4652 NamesrvStartup

$ jstack -l 4864 > 4864.txt

image.png

5. jmap

jmap - 打印进程、corefile、或远程调试服务器的共享对象内存映射或堆内存细节。此命令是实验性的,不受支持。

5.1 语法

jmap [ options ] pid
jmap [ options ] executable core
jmap [ options ] [ pid ] server-id@ ] remote-hostname-or-IP
  • options : 参见 Options 部分
  • pid :要为其打印内存映射的进程ID。该进程必须是Java进程。要获得机器上运行的Java进程列表,请使用 jps 命令。
  • executable :从中生成 core dump 转储的 Java 可执行文件
  • core - 要为其打印内存映射的核心文件
  • remote-hostname-or-IP : 远程调试服务器主机名或IP地址
  • server-id :一个可选的唯一ID,当多个调试服务器在同一远程主机上运行时使用

5.2 描述

jmap 命令打印指定进程、corefile 或远程调试服务器的共享对象内存映射或堆内存详细信息。如果指定的进程运行在64位Java虚拟机(JVM)上,则可能需要指定 -J-d64 选项,例如:
jmap -J-d64 -heap pid

注意:此程序不受支持,在JDK的未来版本中可能无法使用。在不存在 dbgeng.dll 文件的Windows系统上,必须安装用于Windows的调试工具才能使这些工具工作。PATH环境变量应该包含目标进程使用的 jvm.dll文件的位置或者产生崩溃转储文件的位置,例如:
set PATH=%JDK_HOME%\jre\bin\client;%PATH%

5.3 选项

  • 无选项:当不适用任何选项时,jmap 命令打印共享对象映射。对于目标JVM中加载的每个共享对象,将打印起始地址、映射大小和共享对象文件的完整路径。此行为类似于 Oracle Solaris pmap 程序。
  • -dump:[live,] format=b, file=filename :将 Java 堆以 hprof 二进制格式转储到文件。live 子选项是可选的,但是当指定时,只有堆中的活动对象被转储。要浏览堆转储,可以用时 jhat 命令读取生成的文件
  • -finalizerinfo :打印关于等待完成的对象的信息
  • -heap :打印所使用的垃圾收集的堆摘要、头配置和按代计算的堆使用情况。此外,还会打印被存储字符串的数量和大小
  • -histo[:live] :打印堆得直方图。对于每个Java类,打印对象的数量、内存大小(以字节为单位)和完全限定的类名。JVM内部类名以星号(*)前缀打印。如果指定了live子选项,则只统计活动对象。
  • -clstats :打印Java堆得类加载器统计信息。对于每个类加载器,打印它的名称、活动状态、地址、父类加载器以及它已加载的类的数量和大小
  • -F :强制。当 pid 没有响应时,将此选项与jmap -dump或 jmap -histo 选项一起使用。在此模式下不支持 live 子选项
  • -h :打印帮助信息
  • -help :打印帮助信息
  • -Jflag :将标志传递给运行jmap命令的Java虚拟机

5.4 示例

示例1:

$ jmap -dump:live,format=b,file=4864.hprof 4864

image.png

6. jhat

jhat - 分析Java堆。此命令是实验性的,不受支持。

6.1 语法

jhat [ options ] heap-dump-file

options : 参见 Options 部分
heap-dump-file : 要浏览的Java二进制堆转储文件。对于包含多个堆转储的转储文件,你可以通过在文件名后面追加 # 来指定文件中的哪个转储,例如 myfile.hprof#3。

6.2 描述

jhat 命令解析 Java 堆转储文件并启动 web 服务器。jhat 命令允许你使用自己喜欢的web浏览器浏览堆转储。jhat命令支持预先设计的查询,例如显式已知类 MyClass 的所有实例和对象查询语言(Object Query Language, OQL)。OQL 类似于 SQL,知识用于查询堆转储。OQL的帮助可以从jhat命令显示的OQL帮助页面获得。使用默认端口,OQL 帮助可以在 https://localhost:7000/oqlhelp 上获得。
有几种方法可以生成Java堆转储:

  • 使用 jmap -dump 选项在运行时获取堆转储
  • 使用jconsole选项在运行时通过HotSpotDiagnosticMXBean获得堆转储。请参阅jconsole和
  • 当抛出 OutOfMemoryError 时,通过指定 -XX:+HeapDumpOnOutOfMemoryError Java 虚拟机(JVM)选项生成堆转储
  • 使用 hprof 命令。请参阅 http://docs.oracle.com/javase/8/docs/technotes/samples/hprof.html 上的HPROF:A Heap/CPU Profiling 。

6.3 选项

  • -stack false|true : 关闭跟踪对象分配调用堆栈。如果在堆转储中没有分配站点信息,则必须将此标志设置为false。默认为 true
  • refs false|true : 关闭对对象引用的跟踪。默认为true。默认情况下,返回指针(指向指定对象的对象,如引用或传入引用)将为堆中的所有对象计算
  • -port port-number :设置jhat HTTP服务器的端口。缺省值为 7000
  • -exclude exclude-file : 指定一个文件,该文件列出应从可达对象查询中排除的数据成员。例如,如果文件列出 java.lang.String.value。那么,当计算从特定对象 o 可达的对象列表时,不考虑包含 java.lang.String.value 字段的引用路径
  • -baseline exclude-file :指定基线堆转储。两个堆转储中具有相同对象ID的对象被标记为非新对象。其它对象被标记为new。这对于比较两个不同的堆转储非常有用
  • -debug int :设置此工具的调试级别。0 标识没有调试输出。为更详细的模式设置更高的值
  • -version :报告版本号并退出
  • -h :打印帮助信息并退出
  • -help :打印帮助信息并退出
  • -Jflag :将标志传递给正在运行jhat命令的Java虚拟机。例如,-J-Xmx512m 使用最大堆大小为 512 MB

6.4 示例

示例1:

$ jhat 5611.bin

image.png
image.png

JDK监控和故障处理工具总结 VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随 JDK 发布的功能最强大的运行监视和故障处理程序,官方在 VisualVM 的软件说明中写上了“All-in-One”的描述字样,预示着他除了运行监视、故障处理外,还提供了很多其他方面的功能,如性能分析(Profiling)。生成线程快照的目的主要是定位线程长时间出现停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的原因。:输出对应名称的参数的具体值。 阅读详情

相关推荐

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

S0U 年轻代中第一个(survisor)幸存区目前已使用的容量(kb)S1U 年轻代中第二个(survisor)幸存区目前已使用的容量(kb)S0U 年轻代中第一个survior(幸存区)目前已使用的容量(kb)S1U 年轻代中第二个survior(幸存区)目前已使用的容量(kb)S0CMX 年轻代第一个幸存区(survisor)最大容量(kb)NGCMN 年轻代(young)中初始化(最小)的大小(kb)NGCMX 年轻代(young)中初始化(最大)的大小(kb)

Elvis Hu的博客 180

常用的JDK调优&监控工具整理

VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进行动态的性能分析。同时,它能自动选择更快更轻量级的技术尽量减少性能分析对应用程序造成的影响,提高性能分析的精度。

不会骑摩托的程序员不是好的摄影师 2831

SQL手工注入及sqlmap注入(文章管理系统实例练习)

sql手工注入及sqlmap注入练习

weixin_53303754的博客 522

JDK自带JVM分析工具

JVM工具

m0_37840000的博客 3565

离线安装samba与配置(.tar方式安装)

个人记录

小道士写程序 7719

ISP调试工程师相关面试问题_001

Qualcomm、MTK等ISP pipeline的框架原理及算法原理,还有调试经验。

notgoodenouf的博客 3544

JDK自带监控和故障处理常用工具

1.jps   jsp可以列出正在运行的虚拟机进程,并显示其执行主类(main函数所在的类)的名称和进程ID。 jps命令行参数可以通过下面命令查看: [root@iZ25w1kdi5zZ ~]# jps -help jps命令主要选项及说明: -q 只输出进程ID的名称,省略主类的名称 -m 输出虚拟机进程启动时传递给主类main()函数的参数 -l 输出主类的命名,如果进程执行的...

god_wot的专栏 1146

centos7搭建LNMP环境-编译安装&yum安装-超详细

文章目录1. 首先了解编译安装和yum安装的区别。2. yum安装准备工作---切换阿里云yum源3. 编译安装lnmp4.yum安装lnmp5. lnmp一键安装6. 一些报错7. 笔记8. 参考文章 1. 首先了解编译安装和yum安装的区别。 windows下安装centos虚拟机,之前写过。传送门~~ 编译安装: 可以按需安装,想安在哪个目录下就安在哪个目录下。 可以设定参数 可安装自己想要的版本 yum安装: 安装的方便快捷 不需要考虑包的依赖 可以直接使用service nginx st

最美不过下雨天 9349

8款 JDK 自带的监控和故障处理工具,定位问题太方便了!

目录jps--虚拟机进程查看工具jstat--虚拟机统计监视工具jinfo--虚拟机配置信息工具jmap--虚拟机内存映象工具jhat--虚拟机HeapDump分析工具jstack--java堆栈跟踪工具Jconsole和VisualVMvisualVM分析OutOfMemoryError异常jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问...

Java知音 1091

抖音直播小风车跳转企业微信全攻略:企业号申请+落地页配置详解

本文详细解析了抖音直播小风车跳转企业微信的全流程,包括企业号申请、小风车配置和落地页优化。通过实战指南,帮助企业高效实现私域流量沉淀,提升直播转化率,特别适合电商和营销从业者参考。

weixin_29289821的博客 612

Linux内核模块开发实战指南(2025版)

2025年Linux内核模块开发迎来革命性突破!本文将从零开始手把手教你构建可动态加载的AI加速驱动模块,揭秘最新内核特性与开发技巧,更包含独家性能调优方案与跨架构移植秘籍。文末附赠价值百万的调试脚本,助你轻松突破开发瓶颈!

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1806

14.8款 JDK 自带的监控和故障处理工具,定位问题太方便了!

目录jps--虚拟机进程查看工具jstat--虚拟机统计监视工具jinfo--虚拟机配置信息工具jmap--虚拟机内存映象工具jhat--虚拟机HeapDump分析工具jstack--java堆栈跟踪工具Jconsole和VisualVMvisualVM分析OutOfMemoryError异常jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问题,这篇就将jdk自带命令行和可视化工具做一下汇总介绍。

weixin_JimZemlin的博客 498

UG\NX二次开发 一个创建小平面体的例子

介绍。

王牌飞行员_里海的博客 443

六、JVM — JDK 监控和故障处理工具

JDK 监控和故障处理工具总结 JDK 命令行工具 jps:查看所有 Java 进程 jstat: 监视虚拟机各种运行状态信息 jinfo: 实时地查看和调整虚拟机各项参数 jmap:生成堆转储快照 jhat: 分析 heapdump 文件 jstack:生成虚拟机当前时刻的线程快照 JDK 可视化分析工具 JConsole:Java 监视与管理控制台 ...

weixin_34247299的博客 457

openclaw通俗入门系列9——流式传输 + 分块

流式传输 = 不等写完就开始发。分块流式传输是把长回复切成几条消息发(所有渠道),草稿流式传输是像打字一样实时显示(仅 Telegram)。可以配置块大小、发送时机、合并规则、类人延迟。

m0_60605453的博客 506

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JDK 监控和故障处理工具

JDK 监控和故障处理工具总结 JDK 命令行工具 这些命令在 JDK 安装目录下的 bin 目录下: jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息; jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据; jinfo (Configuration Info for Java)

XZSJ_Front的博客 2695

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JDK 监控和故障处理工具总结

转自:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/jvm/JDK%E7%9B%91%E6%8E%A7%E5%92%8C%E6%95%85%E9%9A%9C%E5%A4%84%E7%90%86%E5%B7%A5%E5%85%B7%E6%80%BB%E7%BB%93.md JDK 监控和故障处理工具总结 J...

赵小白javaweb的博客 196

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

几个必会的JDK性能监控和故障处理工具

???? 这是一个或许对你有用的社群???? 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事上“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

芋艿V 144

JVM监控和故障处理工具

JDK监控和故障处理工具 名称 主要用途 jps JVM Process Status Tool ,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool ,用于收集HotSpot虚拟机各方面的运行数据 jinfo Configuration Info forJava,显示虚拟机配置信息 ...

ystyaoshengting的专栏 1106

Java核心技术之虚拟机性能监控与故障处理---JDK的可视化工具

 JDK中有这么两个可视化工具:JConsole和VisualVM,它们是JDK的正式成员。   JConsole:Java监视与管理控制台  JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工具。 启动JConsole  进入到JDK/bin目录下,通过“jconsole.exe”启动JConsole。程序将自动搜...

喜三仔的世界 233

虚拟机性能监控和故障处理工具

虚拟机性能监控和故障处理工具 该章节仅仅是对各个工具的理论和参数上的简单介绍,具体的使用规则见各个文件中实际使用; 介绍环境 java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed...

GJXAIOU 的 优快云 博客 441

JDK命令行监控和故障处理工具

JDK监控和故障处理工具 名称 主要作用 jps JVMProcessStatusTool,显示指定系统内所有的HotSpot虚拟机进程。 jstat JVMStatisticsMonitoringTool,用于收集HotSpot虚拟机各方面的运行数据 jinfo ConfigurationInfoforJava,显示...

124

JVM性能监控与故障处理工具有哪些?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 JDK监控与故障处理工具 名称 类型 主要作用 jps 命令行 JVM Process Status Tool,JVM 进程状态工具,显示指定系统内所有的 Hotspot 虚拟机进程 jstat 命令行 JVM Statistics Monitoring Tool,JVM 统计监控工具

Shockang的博客 1万+
上一篇: hashCode() 与 equals()
下一篇: Redis5.0集群搭建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值