初步了解JVM第四篇熟悉JDK自带工具

1. jps (Java Virtual Machine Process Status Tool)

  • 用途:列出系统中所有的HotSpot虚拟机进程。

  • 命令jps -lvm

2. jstat (JVM Statistics Monitoring Tool)

  • 用途:用于监视虚拟机各种运行状态信息的命令行工具。可以显示类装载、内存、垃圾收集、JIT编译等数据。

  • 命令jstat -gc / jstat -gccapacity pid

  • 详解:

  1. S0C:第一个幸存区的大小,单位KB
  2. S1C:第二个幸存区的大小
  3. S0U:第一个幸存区的使用大小
  4. S1U:第二个幸存区的使用大小
  5. EC:伊甸园区的大小
  6. EU:伊甸园区的使用大小
  7. OC:老年代大小
  8. OU:老年代使用大小
  9. MC:方法区大小
  10. MU:方法去使用大小
  11. CCSC:压缩类空间大小
  12. CCSU:压缩类空间使用大小
  13. YGC:年轻代垃圾回收次数
  14. YGCT:年轻代回收消耗时间,单位s
  15. FGC:老年代垃圾回收次数
  16. FGCT:老年代垃圾回收消耗时间,单位s
  17. GCT:垃圾回收消耗总时间,单位s

3. jinfo (Configuration Info for Java)

  • 用途:实时查看和调整虚拟机的配置参数。

  • 命令jinfo -flags

4. jmap (Memory Map for Java)

  • 用途:生成Java进程的内存转储快照(heap dump)。这对于分析内存泄漏等问题非常有用。

  • 命令jmap -heap  或 jmap -histo:live >./log.txt 保存日志

  • 通过日志进行分析:

num :序号、instances:实例数量、bytes:z占用空间大小、class name: 类名称

  • 设置内存溢出自动导出dump文件:
  1. -XX:HeapDumpOnoutOfMemoryErr
  2. -XX:HeapDumpPath=./路径

5. jstack (Stack Trace)

  • 用途:生成Java虚拟机当前时刻的线程快照。主要用于分析线程死锁等问题。

  • 命令jstack   / jstack tid|grep -A 线程id的十六进制

  • 通过日志分析:

Thread-1:线程名 、prio=5 :优先级=5 、 tid=0X00000001fae900:线程id、java.lang.Tread.State:RUNNABLE 线程状态 

6. jcmd (Java Core Management)

  • 用途:是一个多功能命令行工具,可以用来发送诊断命令请求到运行中的HotSpot虚拟机。它结合了jpsjstatjinfo的功能。

  • 命令jcmd VM.flags 或 jcmd Thread.print

7. VisualVM

  • 用途:一个功能强大的可视化的工具,用于监控、分析Java应用程序的性能和内存使用情况。它提供了一个图形界面来查看JVM的各种状态和性能数据。

  • 下载和使用:可以通过JDK自带或者从官网下载。

8. JConsole

  • 用途:是一个基于JMX的监控、管理、和监控工具,可以用来监视和管理Java应用程序的运行情况。

  • 下载和使用:可以通过JDK自带或者从官网下载。

使用建议:

  1. 选择合适的工具:根据需要监控的内容(如内存使用、线程状态等)选择合适的工具。

  2. 定期监控:定期使用这些工具来监控应用程序的性能,及时发现并解决问题。

  3. 分析报告:利用工具生成的报告或快照进行深入分析,找出性能瓶颈或内存泄漏等问题。

  4. 结合日志:与应用程序的日志信息结合使用,可以更全面地理解问题的上下文。

通过这些工具,你可以有效地监控和优化你的Java应用程序的性能。-

你可能感兴趣的:(jvm,java,开发语言)