Java Tools

工具指南

jshell

Java交互式命令

jshell [options] [load-files]

load-files是命令启动时运行的一个或多个脚本文件,可以包含任何有效代码片段或JShell命令。可以是本地文件,或者如下预先定义的脚本:

DEFAULT
Loads the default entries, which are commonly used as imports.
JAVASE
Imports all Java SE packages.
PRINTING
Defines print, println, and printf as jshell methods for use within the tool.

超过一个脚本使用空格分开名字,脚本按照命令行输入顺序执行,命令行脚本将在启动脚本之后运行。在JShell启动之后运行脚本,使用/open命令。

jcmd

jcmd <pid | main class> <command ...|PerfCounter.print|-f file>

列出本地VM进程(包括pid和main class):

1
jcmd -l

查看所有可用选项

1
jcmd <pid | main class>

获取指定选项帮助

1
jcmd <pid | main class> help <command>

jdb

jdb [options] [classname] [arguments]

classname代表要调试的main class的名字。arguments是传给main()方法的参数。

jinfo

生成Java指定进程的配置信息。

jinfo [option] pid

如果指定进程在64位JVM上运行,可能需要指定-J-d64选项。例如:

1
jinfo -J-d64 -sysprops pid

jmap

输出指定进程的详细信息。

jmap [options] pid

jps

jps可以列出正在使用的JVM

jps [-q] [-mlvV][hostid]

hostid格式如下

[protocol:][[//]hostname][:port][/servername]
  • -q可以禁止输出类名、JAR文件名和main方法参数。只显示本地JVM标识符。
  • -m显示传给main方法的参数
  • -l显示main类的完整包名或JAR文件的完整路径
  • -v显示传给JVM的参数
  • -V 与-q相似

例如

1
jps -l localhost

jstack

输出Java指定进程的线程堆栈跟踪信息。

1
jstack [options] pid

-l选项可以输出关于锁的额外信息。

jstat

监控JVM统计信息

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

查看所有可用选项:

1
jstat -options

vmid是指VM标识符,格式为<lvmid>[@<hostname>[:<port>]],其中<lvmid>是本地虚拟机标识符,一般为进程id,hostname和port指主机名和端口。

Java监控工具

VM基本信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 已启动时间
jcmd process_id VM.uptime
# 系统信息
jcmd process_id VM.system_properties
# 或
jinfo -sysprops process_id
# JVM版本
jcmd process_id VM.version
# 启动此VM的命令行,也可以使用jconsole查看
jcmd process_id VM.command_line
# 指定应用的JVM调优标志
jcmd process_id VM.flags [-all]
# 或
jinfo -flags process_id

线程信息

jconsole可以查看正在运行的线程数量。

1
2
3
4
# 查看正运行线程的stack
jstack process_id
# 或
jcmd process_id Thread.print

类信息

可以使用jconsole或jstat获取应用程序使用的类数量。jstat也可以获取类的编译信息。

live GC分析

实际上,每个监视工具都会报告有关GC活动的信息。 jconsole显示堆使用情况的实时图表; jcmd允许执行GC操作; jmap可以在永久代上打印堆摘要或信息,也可以创建堆转储; 而jstat产生了很多有关垃圾收集器正在执行的操作的视图。

堆转储后处理

可以从jvisualvm GUI或使用jcmd或jmap从命令行捕获堆转储。 堆转储是堆的快照,可以使用各种工具(包括jvisualvm)对其进行分析。