9

【JVM问题排查】JDK命令行工具详解,这四个工具你都会用吗?

 11 months ago
source link: https://www.51cto.com/article/769050.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【JVM问题排查】JDK命令行工具详解,这四个工具你都会用吗?

作者:Springboot实战案例锦集 2023-10-09 08:44:51
使用jmap生成堆转储文件:jmap是一个用于生成Java堆转储文件的工具。当JVM内存溢出或需要排查内存问题时,可以使用jmap指令生成堆转储文件,以帮助开发人员找到内存泄漏或垃圾回收等问题。

环境:JDK1.8.0_92

JDK(Java Development Kit)提供了一系列的命令行工具,用于帮助开发人员进行问题排查。以下是关于JDK命令行工具问题排查的一些常见操作:

  1. 使用jps查看虚拟机进程:jps是一个用于显示Java虚拟机(JVM)进程信息的工具。通过jps指令可以获取到正在运行的JVM进程的ID(PID),这对于后续的问题排查非常有用。
  2. 使用jstat监视虚拟机运行时信息:jstat是一个用于监视虚拟机运行时各种信息的工具。它可以监控类加载数量、内存使用情况、垃圾回收情况等信息,对于排查内存泄漏、GC问题等非常有用。
  3. 使用jstack获取线程堆栈信息:jstack是一个用于获取Java线程堆栈信息的工具。当JVM进程出现异常或卡顿时,可以使用jstack指令获取线程堆栈信息,以帮助开发人员找到问题所在。
  4. 使用jmap生成堆转储文件:jmap是一个用于生成Java堆转储文件的工具。当JVM内存溢出或需要排查内存问题时,可以使用jmap指令生成堆转储文件,以帮助开发人员找到内存泄漏或垃圾回收等问题。

以上是JDK命令行工具问题排查中常用的几个操作,它们可以帮助开发人员快速定位和解决问题。当然,还有其他JDK提供的工具也可以用于问题排查,例如jconsole、jvisualvm等。

JDK命令行工具所在目录%JAVA_HOME%\bin 目录下:

图片

图片

这里你会发现这些工具的大小基本上都是17kb左右。为何?因为这些工具大部分都是

%JAVA_HOME%\bin\tools.jar这个jar中的类实现的,而这里的可执行exe文件只是对这写功能做了简单的一个封装而已。

对应到tools.jar中

图片

图片

接下来对常用的工具做介绍:

1.jps

显示所有当前正在运行的HosSpot虚拟机进程。

图片

图片

-l :输出完整的包名+类名,如果执行的是jar包,输出jar包的路径。

图片

图片

-m:输出启动程序时,传的参数信息。

测试程序:

public class JpsMain {


  public static void main(String[] args) throws Exception {
    System.out.println(Arrays.toString(args)) ;
    System.in.read() ;
  }


}

启动参数设置:

图片

图片

启动时设置了3个参数分别是:a , b , c

图片

图片

-v:输出进程启动时的jvm参数。

还是以上面的测试程序为例:

启动jvm参数设置:

图片

图片

图片

图片

-q:只输出进程号。

图片

图片

到此jps工具介绍完毕。

2.jstat

用于监视虚拟机运行时的各种信息。如:类加载,内存,垃圾回收等信息。

使用格式:

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

vmid:表示jvm进程号。

interval:表示查询间隔(单位秒 s,毫秒 ms)。

count:表示查询次数

查看option有哪些选项信息(也就是可以监控哪些信息)

jstat -options
图片

图片

-class: 显示类加载,卸载的数量,总空间及加载所耗时。

图片

图片

-compiler:显示JIT编译器编译过的方法,耗时等信息。

图片

图片

-gc:监视Java堆的使用情况,GC时间等信息。

图片

图片

S0C:第一个幸存区的大小

S1C:第二个幸存区的大小

S0U:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法区大小

MU:方法区使用大小

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

-gcutil:该选项与-gc基本相同,但他主要关注的是已使用空间占总空间的百分比。

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

-gcnew:监视年轻代GC情况。

图片

图片

-gcold:监视老轻代GC情况。

图片

图片

jstat -gc 16480 3s

每3秒统计一次gc信息。

图片

图片

3. jinfo

实时查看和调整虚拟机各项参数。

jinfo option pid

示例:
输出当前jvm进程的完整信息

图片

图片

查询具体jvm参数值信息:

jinfo -flag CICompilerCount 16480

4. jmap

用于生成堆转储快照信息。

使用格式:

jmap [option] pid

option参数说明:

-dump:生成Java堆转储快照

jmap -dump:live,format=b,file=heap.bin <pid>

图片图片

图片

图片

-heap:显示Java堆详细信息。如:使用的垃圾回收期,参数配置,分代信息等。

jmap -heap <pid>
图片

图片

-histo:显示堆中对象的统计信息,包括类,实例数,合计容量等。

jmap -histo <pid>
图片

图片

5. jhat

堆转储文件分析工具。

使用格式:

jhat <file>

分析上面生成的文件

图片

图片

这里生成了一个端口为7000的服务,直接访问

图片

图片

6. jstack

用于生成当前进程中当前时刻线程的快照。

使用格式:

jstack [option] <pid>

-F:当正常输出的请求不被响应时,强制输出线程堆栈。

-l:除了显示堆栈信息,还显示关于锁的相关信息。

-m:如果调用的是本地方法,可以显示C/C++的堆栈。

图片

图片

图片

图片

完毕!!!


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK