jvm调优工具

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

http://www.eclipse.org/mat/

  • JITWatch

https://github.com/AdoptOpenJDK/jitwatch

远程连接工具

https://docs.oracle.com/en/java/javase/11/jmx/introduction-jmx-technology.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值