JDK内置命令工具及JVM调优

381 阅读2分钟

是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

javap

java反编译工具,主要用于根据java字节码文件反汇编为java源代码文件。

javap <sptions> <classes>

jstat

jstat监视Java虚拟机(JVM)统计信息

用法:jstat [generalOption|outputOptions vmid [ interval [s | ms ] [ count ]]

-t参数 可以输出信息前面加上一个Timestamp列,显示程序运行的时间。

-h参数 可以在周期性的数据输出时,输出多少行数据后,跟着输出一个表头信息。

interval 指定输出统计周期,count 指定输出多少次数据。

jcmd

jcmd 工具,可以替代jps 工具查看本地的jvm信息

jcmd -l 

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

jinfo

jinfo 可以查看运行中jvm 的全部参数,还可以设置部分参数。

info [ option ] pid 

info [ option ] executable core 

info [ option ] [server-id@] remote-hostname-or-IP

jhat

Java Head Analyse Tool 分析java堆的命令,可以将堆中的对象以html的形式显示出来,支持对象查询语言OQL 

jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version ]  [-h|-help ]  <file>

jmap

打印出java进程内存中Object的情况。或者将VM中的堆,以二进制输出成文本。

jmap [ option ] pid (to connect to remote debug server)

jmap [ option ] executable core (to connect to remote debug server)

jmap [ option ] [server-id@]remote-hostname-or-IP (to connect to remote debug server)

jstack

堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file 或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项 "-J-d64"

jstack [ option ] pid 

jstack [ option ] executable core 

jstack [ option ] [server-id@]remote-hostname-or-IP 

Jconsole


JvisualVM     

调优基本概念

在调整性能时,JVM有三个组件:

  1. 堆大小调整
  2. 垃圾回收器调整
  3. JIT编译器

大多数调优选项都与调整堆大小和为您的情况选择最合适的垃圾收集器有关。JIT编译器对性能也有很大影响,但很少需要使用新版本的JVM进行调优。

通常,在调优Java应用程序时,重点是以下两个主要目标之一:

响应性:应用程序或系统对请求的数据进行响应的速度,对于专注于响应性的应用程序,长的暂停时间是不可接受的,重点是在短时间内做出回应。

吞吐量:侧重于在特定时间段内最大化应用程序的工作量,对于专注于吞吐量的应用程序,高暂停时间是可接受的。由于高吞吐量应用程序在较长时间内专注于基准测试,因此不需要考虑快速响应时间。

系统瓶颈核心还是在应用代码,一般情况下无需过多调优,JVM本身在不断优化。