JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)

上篇文章里《JVM常用性能调优工具详解1》我们已经探究了jps、jstat等监控工具,以及jinfo、jmap、jstack、jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcmd。(因为jcmd这玩意细节太多了,整理文档就整理了好几个小时…)

jcmd

jcmd全称JVM Command,用于将诊断命令请求发送到正在运行的Java虚拟机,从JDK 7开始提供。

使用说明

命令如下:
在这里插入图片描述

-f				从文件读取并执行命令
-l				列出本机上的所有JVM进程

我们先来看一下最简单的jcmd -l
可以查看当前正在运行的所有JVM进程,和jps有点类似
在这里插入图片描述
jcmd -h可以查看jcmd的帮助文档。

再来看一下jcmd <pid | main class> <command ...| PerfCounter.print | -f file>
这个命令

参数说明:

  • pid:接受诊断命令请求的进程ID。
  • main class:接受诊断命令请求的进程main类。jcmd会将诊断命令请求发送给指定main class的所有Java进程。
  • command:command必须是一个有效的jcmd命令,可以使用jcmd pid help命令查看可用的命令列表。如果pid是0,那么command将会被发送给所有Java进程。main class会用来去匹配(局部匹配或全量匹配)。如果未指定任何选项,他将会列出正在运行的Java进程标识符以及用于启动该进程的main class和命令参数(相当于使用了-l参数)
  • PerfCounter.print:打印指定Java进程上可用的性能计数器。
  • -f filename:从指定文件中读取命令并执行。在file中,每个命令必须写在单独的一行。以“#”开头的行会被忽略。当所有行的命令被调用完毕后,或者读取到含有stop关键字的命令,将会终止对file的处理。
  • -l:查看所有JVM进程。jcmd不使用参数与jcmd -l效果相同。

我们先用PerfCounter.print玩一下:在这里插入图片描述

这样我们就能看到12735这个进程的性能计数器

我们换种玩法
先用jps -l获取启动类。
在这里插入图片描述
然后用jcmd跟上启动类:
在这里插入图片描述
可以发现也能正常获取结果。
当然最主要的还是另一种复杂的玩法,就是跟命令的形式。
那么jcmd有哪些命令呢?

下面我总结出了全网最全的jcmd的命令以及使用说明。整理这篇命令手记花费了作者大量的精力,可以说是全网无出其右,建议小伙伴们保存下来,方便后续查看。

支持的命令

1.help [options] [arguments]
  • 作用:查看指定命令的帮助信息
  • arguments:想查看帮助的命令(STRING,无默认值)
  • options:选项,必须使用key或者key=value的语法指定,可用的options如下:
    • -all:(可选)查看所有命令的帮助信息(BOOLEAN,false)

使用示例:

# 获得指定进程可用的命令列表
jcmd <pid> help
# 获取指定进程、指定命令的帮助信息,如果参数包含空格,需要用 ' 或者 " 引起来
jcmd <pid> help <command>
2.Compiler.codecache
  • 作用:打印code cache(代码缓存)的布局和边界
  • 影响:低
  • 所需权限:java.lang.management.ManagementPermission(monitor)
3.Complier.codelist
  • 作用:打印代码缓存中所有人在运行的已编译方法
  • 影响:中
  • 所需权限:java.lang.management.ManagementPermission(monitor)
4.Compiler.queue
  • 作用:打印排队等待编译的方法
  • 影响:低
  • 所需权限:java.lang.management.ManagementPermission(monitor)
5.Compiler.directives_add filename arguments
  • 作用:从文件添加编译器指令
  • 影响:低
  • 所需权限:java.lang.management.ManagementPermission(monitor)
  • filename:指令文件的名称(STRING,无默认值)
6.Compiler.directives_clear
  • 作用:删除所有编译器指令
  • 影响:低
  • 所需权限:java.lang.management.ManagementPermission(monitor)
7.Compiler.directives_print
  • 作用:打印所有活动的编译器指令
  • 影响:低
  • 所需权限:java.lang.management.ManagementPe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值