https://docs.oracle.com/en/java/javase/11/tools/
https://chriswhocodes.com/hotspot_option_differences.html
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html
内置工具
监控工具
- jps
可以使用该jps命令列出目标系统上已检测到的JVM进程,此命令是实验性的
jps [-q] [-mlvV][hostid]
jps [-help]
-q
只显示进程号
-mlvV
-m显示传递给main方法的参数。输出可能是null针对嵌入式JVM的。
-l显示应用程序main类的完整程序包名称或应用程序JAR文件的完整路径名。
-v 显示传递给JVM的参数。
-V禁止输出类名称,JAR文件名和传递给该main方法的参数的输出,从而仅生成本地JVM标识符的列表。
hostid
应为其生成过程报告的主机的标识符。的hostid可以包括指示所述通信协议,端口号,和其它实施方式特定的数据的可选组件。请参阅主机标识符。
-help
显示jps命令的帮助消息
语法hostid串对应于URI的语法
[protocol:][[//]hostname][:port][/servername]
protocol
通信协议。如果protocol省略hostname且未指定a,则默认协议为特定于平台的优化本地协议。如果省略协议,并且指定了主机名,则默认协议为rmi。
hostname
指示目标主机的主机名或IP地址。如果省略该hostname参数,则目标主机为本地主机。
port
与远程服务器通信的默认端口。如果hostname省略该protocol参数或该参数指定优化的本地协议,则将port忽略该参数。否则,该port参数的处理是特定于实现的。对于默认rmi协议,该port参数指示rmiregistry远程主机上的端口号。如果port省略该参数,并且该protocol参数指示rmi,则使用默认rmiregistry端口(1099)。
servername
此参数的处理方式取决于实现方式。对于优化的本地协议,此字段将被忽略。对于rmi协议,此参数是一个字符串,代表远程主机上RMI远程对象的名称。请参见jstatd命令-n选项
- jstat
来监视JVM各种运行状态,此命令是实验性的
jstat outputOptions [-t] \[-h lines] vmid [interval [count] ]
outputOptions
由选项报告的-options选项。一个或由单个的多输出选项statOption,加上任何的-t,-h和-J选项。请参见jstat命令的输出选项。
-t
将时间戳列显示为输出的第一列。时间戳是自目标JVM启动时间以来的时间。
-h n
每个n样本(输出行)显示一个列标题,其中n是一个正整数。默认值为0,它显示数据第一行的列标题。
vmid
虚拟机标识符,它是指示目标JVM的字符串。请参阅虚拟机标识符。
interval
采样间隔,以指定单位,秒(s)或毫秒(ms)为单位。默认单位是毫秒。这必须是一个正整数。指定后,该jstat命令将在每个时间间隔生成其输出。
count
要显示的样本数。缺省值是infinity,这将导致jstat命令显示统计信息,直到目标JVM终止或jstat命令终止为止。该值必须是一个正整数
outputOptions选项如下:
class:显示有关类加载器行为的统计信息。
compiler:显示有关Java HotSpot VM即时编译器行为的统计信息。
gc:显示有关垃圾收集堆行为的统计信息。
gccapacity:显示有关世代容量及其相应空间的统计信息。
gccause:显示有关垃圾收集统计信息的摘要(与相同-gcutil),以及上一次和当前(如果适用)垃圾收集事件的原因。
gcnew:显示有关新一代行为的统计信息。
gcnewcapacity:显示有关新一代大小及其相应空间的统计信息。
gcold:显示有关旧时代行为的统计信息和元空间统计信息。
gcoldcapacity:显示有关上一代的大小的统计信息。
gcmetacapacity:显示有关元空间大小的统计信息。
gcutil:显示有关垃圾收集统计信息的摘要。
printcompilation:显示Java HotSpot VM编译方法统计信息。
-JjavaOption
传递javaOption给Java应用程序启动器。例如,-J-Xms48m将启动内存设置为48 MB。有关选项的完整列表,请参见java。
故障排查工具
- jinfo
为指定的Java进程生成Java配置信息。此命令是实验性的
jinfo [option] pid
如果不使用以下任何option选项,则将同时打印命令行标志和系统属性名称/值对。
-flag name
打印指定命令行标志的名称和值。
-flag [+|-]name
启用或禁用指定的布尔命令行标志。
-flag name=value
将指定的命令行标志设置为指定的值。
-flags
打印传递给JVM的命令行标志。
-sysprops
将Java系统属性打印为名称/值对。
-h 或者 -help
打印帮助信息。
pid
要为其打印配置信息的进程ID。该进程必须是Java进程。要获取在机器上运行的Java进程的列表,请使用以下ps命令,或者,如果JVM进程不在单独的docker实例中运行,请使用jps命令。
- jmap
使用该jmap命令打印指定进程的详细信息。此命令是实验性的对于核心文件,请使用jhsdb jmap。
jmap [options] pid
options命令的选项
-clstats pid
连接到正在运行的进程,并打印Java堆的类加载器统计信息。
-finalizerinfo pid
连接到正在运行的进程,并在等待完成的对象上打印信息。
-histo[:live] pid
连接到正在运行的进程,并打印Java对象堆的直方图。如果live指定了子选项,则它仅计算活动对象。
-dump:dump_options pid
连接到正在运行的进程并转储Java堆。该dump_options包括:
live—指定时,仅转储活动对象;否则,将转储。如果未指定,则转储堆中的所有对象。
format=b—转储Java堆。在hprof二进制格式
file=filename —将堆转储到 filename
pid
options要为其打印由所指定的信息的进程ID 。该进程必须是Java进程。要获取在机器上运行的Java进程的列表,请使用以下ps命令,或者,如果JVM进程不在单独的docker实例中运行,请使用jps命令
例子: jmap -dump:live,format=b,file=heap.bin pid
- jstack
使用该jstack命令为指定的Java进程打印Java线程的Java堆栈跟踪。此命令是实验性的,不受支持。对于核心文件,请使用jhsdb jstack
jstack [options] pid
options选项
-l
长列表选项显示有关锁的其他信息。
-h 或者 —help
打印帮助信息。
pid
为其打印堆栈跟踪的进程ID。该进程必须是Java进程。要获取在机器上运行的Java进程的列表,请使用以下ps命令,或者,如果JVM进程不在单独的docker实例中运行,请使用jps命令
- jcmd
可以使用该jcmd实用程序将诊断命令请求发送到正在运行的Java虚拟机
jcmd [pid | main-class] command...|PerfCounter.print|
-f filename
jcmd -l
jcmd -h
pid
使用该jcmd实用程序时,该实用程序会将诊断命令请求发送到Java进程的进程ID。
main-class
使用该jcmd实用程序时,该实用程序会将诊断命令请求发送给具有指定主类名称的所有Java进程。
command
本command必须是一个有效jcmd的选择JVM命令。jcmd通过运行help命令()获得可用命令的列表,其中是正在运行的Java进程的进程ID。如果为,则命令将发送到所有Java进程。main class参数将用于部分或完全匹配用于启动Java的类。如果未提供任何选项,它将列出正在运行的Java进程标识符,以及用于启动该进程的主类和命令行参数(与using相同)。 jcmd pid helppidpid0-l
Perfcounter.print
打印指定的Java进程公开的性能计数器。
-f filename
从指定的文件中读取并执行命令filename。
-l
显示未在单独的docker进程中运行的Java虚拟机进程标识符的列表,以及用于启动该进程的主类和命令行参数。如果JVM在docker进程中,则必须使用诸如ps查找PID的工具
-h
显示jcmd实用程序的命令行帮助
- jhsdb
启动交互式命令行调试器。
jhsdb clhsdb [--pid pid | --exe executable --core coredump]
启动远程调试服务器。
jhsdb debugd [options] (pid | executable coredump) [server-id]
启动交互式GUI调试器。
jhsdb hsdb [--pid pid | --exe executable --core coredump]
打印堆栈并锁定信息。
jhsdb jstack [--pid pid | --exe executable --core coredump] [options]
打印堆信息
jhsdb jmap [--pid pid | --exe executable --core coredump] [options]
打印基本的JVM信息。
jhsdb jinfo [--pid pid | --exe executable --core coredump] [options]
打印性能计数器信息
jhsdb jsnap [options] [--pid pid | --exe executable --core coredump]
pid
jhsdb工具应附加到的进程ID 。该进程必须是Java进程。要获取在机器上运行的Java进程的列表,请使用以下ps命令;如果JVM进程不在单独的docker实例中运行,请使用jps命令
server-id
当多个调试服务器在同一远程主机上运行时使用的可选唯一ID。
executable
从中生成核心转储的Java可执行文件。
coredump
jhsdb工具应附加到的核心文件
jinfo模式的选项
如果不指定选项,该jhsdb jinfo命令将同时输出标志和属性。
--flags
打印VM标志。
--sysprops
打印Java系统属性。
没有选择
打印VM标志和Java系统属性。
jmap模式的选项
除了以下模式的特定选项,所述pid,exe或core在所描述的选项为jhsdb模式通用选项必须被提供。
没有选择
打印与Solaris相同的信息pmap。
--heap
打印java堆摘要。
--binaryheap
java以hprof二进制格式转储堆。
--dumpfile
需要将信息写入其中的文件的名称。
--histo
打印java对象堆的直方图。
--clstats
打印类加载器统计信息。
--finalizerinfo
在等待完成的对象上打印信息。
jstack模式的选项
除了以下模式的特定选项,所述pid,exe或core在所描述的选项为jhsdb模式通用选项必须被提供。
--locks
打印java.util.concurrent锁信息。
--mixed
java如果平台允许,则尝试同时打印原始帧和原始帧。
jsnap模式的选项
除以下模式的具体选择,pid,exe,或core在描述选项为jhsdb模式的常用选项,必须提供。
--all
打印所有性能计数器。

可视化工具
- jhsdb
- jconsole
使用该jconsole命令启动图形控制台来监视和管理Java应用程序
jconsole [-interval=n] [-notile] [-plugin path] [-version] [connection ... ] [-Jinput_arguments]
jconsole -help
选项
-interval
将更新间隔设置为n秒(默认为4秒)。
-notile
不为两个或多个连接平铺窗口。
-pluginpath path
指定jconsole用于查找插件的路径。该插件path应包含一个名为的提供程序配置文件META-INF/services/com.sun.tools.jconsole.JConsolePlugin,其中每个插件包含一行。该行指定实现com.sun.tools.jconsole.JConsolePlugin该类的类的全限定类名。
-version
打印程序版本。
connection = pid | host:port | jmxURL
连接是由任一描述的pid,或。 host:portjmxURL
该pid值是目标进程的进程ID。JVM必须以与运行jconsole命令的用户ID相同的用户ID运行。
这些值是运行JVM的主机系统的名称,以及启动JVM时由系统属性指定的端口号。
host:portcom.sun.management.jmxremote.port
该jmxUrl值是要连接的JMX代理的地址,如JMXServiceURL中所述。
-Jinput_arguments
传递input_arguments到在其jconsole上运行命令的JVM 。
-help 或者 --help
显示命令的帮助消息。
- visualvm
对于Jdk8和以下的版本内置了
jvisualvm命令启动即可
高版本需要使用的话自行下载安装
- Java Mission Control
https://www.oracle.com/java/technologies/javase/jmc7-release-notes.html
第三方工具
- Memory Analyzer Tool

- JITWatch
https://github.com/AdoptOpenJDK/jitwatch
远程连接工具
https://docs.oracle.com/en/java/javase/11/jmx/introduction-jmx-technology.html
1628

被折叠的 条评论
为什么被折叠?



