查看: 91|回覆: 0

[教程] Java虚拟机(JVM)的自带工具使用详解

[複製鏈接]

2

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-5-8
發表於 2026-1-8 16:51:53 | 顯示全部樓層 |閲讀模式

jps

JVM进程状态工具,用于查看进程的基本信息。JPS是Java Virtual Machine Process Status Tool的缩写,它是Java提供的一个用于查看所有Java进程的命令行工具。

  • jps: 默认情况下,不带任何参数运行jps将显示所有正在运行的Java进程的PID和主类名。
  • jps -l: 使用-l选项可以显示完整的包名和类名
  • jps -m: 使用-m选项可以显示传递给Java进程的启动参数。
  • jps -v: 使用-v选项可以显示传递给Java进程的完整命令行参数

jstat 的各种命令

jstat 是JVM统计监控工具,用于查看堆、GC(垃圾回收)等详细信息。

jstat -gc : 显示垃圾收集统计信息,包括新生代、老年代、永久代等区域的使用情况和垃圾回收次数。

以下是 jstat -gc 命令的一般用法:

jstat -gc <pid> [interval] [count]

其中, 是目标Java进程的进程ID,[interval] 是采样间隔(以毫秒为单位),[count] 是要显示的样本数量。如果不指定 [interval] 和 [count],则默认情况下会持续输出垃圾收集统计信息,直到手动停止。

例如,要查看进程ID为12345的Java虚拟机的垃圾收集统计信息,每隔1000毫秒(1秒)采样一次,共采样10次,可以运行以下命令:

jstat -gc 12345 1000 10

这将输出类似以下格式的数据:

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
 0.0   512.0    0.0    0.0   4096.0   4096.0     8192.0     8192.0   1024.0  768.0  2048.0 2048.0    10    0.123   2      0.045   0.168

每一列的含义如下:

  • S0C: Survivor 0区的容量(字节)
  • S1C: Survivor 1区的容量(字节)
  • S0U: Survivor 0区已使用的空间(字节)
  • S1U: Survivor 1区已使用的空间(字节)
  • EC: Eden区的容量(字节)
  • EU: Eden区已使用的空间(字节)
  • OC: Old区的容量(字节)
  • OU: Old区已使用的空间(字节)
  • MC: Metaspace区的容量(字节)
  • MU: Metaspace区已使用的空间(字节)
  • CCSC: Compressed Class Space区的容量(字节)
  • CCSU: Compressed Class Space区已使用的空间(字节)
  • YGC: 年轻代垃圾回收次数
  • YGCT: 年轻代垃圾回收总耗时(秒)
  • FGC: Full GC次数
  • FGCT: Full GC总耗时(秒)
  • GCT: 垃圾回收总耗时(秒)

jstat中的其他命令:

  • jstat -gccapacity : 显示各个内存区域的容量。
  • jstat -gcutil : 显示垃圾收集统计信息的百分比形式,更直观地展示内存区域使用情况。
  • jstat -gccause : 显示最后一次垃圾回收的原因。
  • jstat -gcnew : 显示新生代的垃圾收集统计信息。
  • jstat -gcold : 显示老年代的垃圾收集统计信息。
  • jstat -gcpermcapacity : 显示永久代的容量。
  • jstat -compiler : 显示即时编译器的编译统计信息。
  • jstat -printcompilation : 显示即时编译器的编译请求和编译耗时。

jinfo

Java配置信息工具,可以查看配置参数信息,还支持部分参数的运行时修改。

使用jinfo命令查看Java应用程序的运行时属性,可以输入以下命令,其中 pid是Java应用程序的进程ID 并输出对应名称的参数:

jinfo  -flag name  <pid>

jmap

Java内存映射工具,用于分析堆内存,还能够dump堆内存快照。

jmap -histo 23173

该命令将会显示进程ID为23173的Java进程的堆内存中各个对象的数量和占用的内存大小。

这个命令可以帮助开发者了解当前Java进程的内存使用情况,从而找出潜在的内存泄漏或者优化内存使用。

jhat

Java堆分析工具,用于解析堆内存的dump文件。当使用jmap或其他方法生成Java的堆文件后,可以使用jhat进行分析。

运行jhat命令后,它会解析堆转储文件并启动一个Web服务器,用户可以通过浏览器访问并查看堆的情况。

在HTML页面上,jhat提供了多种功能,如显示所有类包括平台类、从根集能引用到的对象、显示每个类的实例数量、堆实例的分布表以及执行对象查询语句等。

jhat一般与jmap搭配使用,用于分析jmap生成的堆转储快照。

jstack

Java堆栈跟踪工具,用于查看Java程序的堆栈信息,可以用来分析线程问题(如死锁)。

jstat提供了多种命令选项,可以详细查看堆内存各部分的使用量以及加载类的数量。

例如,使用jstat -class可以查看类加载统计信息,包括加载类的数量、所占用的空间大小以及未加载类的数量和所占用的空间。

jstat -class 23173
#显示如下:
Loaded  Bytes  Unloaded  Bytes     Time   
 19595 40567.9       10    10.3       8.20

jstat -compiler则用于显示JIT编译器的编译统计信息,包括编译数量、失败数量等。

jstat还可以用于监控垃圾回收情况。

例如:

使用jstat -gc可以查看年轻代和老年代的垃圾回收次数、回收消耗时间以及堆内存的使用情况。

通过这些统计信息,开发者可以了解JVM中垃圾回收器的行为,从而优化应用程序的性能。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。

您可能感兴趣的文章:
  • JVM(Java Virtual Machine,Java虚拟机)的作用详解
  • JVM调整java虚拟机可使用的最大内存的方法
  • Java中的JVM虚拟机内存分配详解
  • Java虚拟机JVM栈溢出的问题解决
  • 深入了解JVM(Java虚拟机)内存结构
  • Java JVM虚拟机调优详解
  • java为什么需要虚拟机jvm原理详解
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部