当前位置: 首页 > news >正文

16. JVM调优工具

1. JVM介绍和运行流程

2. JVM程序计数器

3. JAVA堆和JVM内存结构

4. 虚拟机栈

5. JVM的方法区

6. JVM直接内存

7. JVM类加载器与双亲委派模型

8. JVM类装载的执行过程

9. JVM垃圾回收

10. 垃圾回收算法

11. JVM中的分代回收

12. JVM的垃圾回收器

13. G1 垃圾回收器

14. 垃圾回收的引用区别

15. JVM调优的参数设置

16. JVM调优工具


1. 命令工具

  • jps        进程状态信息
  • jstack        查看java进程内线程的堆栈信息
  • jmap        查看堆转信息
  • jhat        堆转储快照分析工具
  • jstat        JVM统计监测工具

1. jps(JVM Process Status Tool)

查看进程状态信息

作用

  • 列出当前系统中所有的Java进程(PID和主类名)。

常用选项

  • -l:显示完整主类名(包含包路径)
  • -v:显示JVM启动参数

示例

public class ToolDemo {public static void main(string[] args){new Thread(()->{while (true){}},name:"t1").start();new Thread(()->{while (true){}},name: "t2").start();new Thread(()->{while(true){}},name:"t3").start();}
}

运行后再控制台查看


2. jstack(Stack Trace Tool)

查看java进程内线程的堆栈信息

作用

  • 生成Java进程的线程快照(Thread Dump),用于分析死锁、线程阻塞、CPU飙高等问题。

常用选项

  • -l:显示锁的附加信息(如持有锁的线程)
  • -F:强制生成线程快照(适用于进程无响应时)

示例

jstack [option] <pid>

public class ToolDemo {public static void main(string[] args){new Thread(()->{while (true){}},name:"t1").start();new Thread(()->{while (true){}},name: "t2").start();new Thread(()->{while(true){}},name:"t3").start();}
}

 运行后再控制台查看

控制台结果会有很多信息 ,下面是我们自己运行的三个线程


3. jmap(Memory Map Tool)

用于生成堆转内存快照、内存使用情况

作用

  • 生成堆内存快照(Heap Dump)或查看堆内存对象分布。

常用选项

  • -heap:显示堆内存配置和使用情况(Eden/Survivor/Old区等)
  • -histo:显示堆中对象的统计直方图(按类/实例数排序)
  • -dump:format=b,file=<filename>:生成二进制Heap Dump文件

示例

jmap -heap pid         显示Java堆的信息
jmap -dump:format=b,file=heap.hprof pid

  • format=b表示以hprof二进制格式转储Java堆的内存。
  • file=<filename>用于指定快照dump文件的文件名。

下面是一个 jmap -heap pid   指令运行后打印的模版

Attaching to process ID 56473, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.321-b07using thread-local object allocation.
Parallel GC with 8 thread(s)  # 使用的GC算法Heap Configuration:  # 堆内存配置MinHeapFreeRatio         = 40MaxHeapFreeRatio         = 70MaxHeapSize              = 4294967296 (4096.0MB)  # 最大堆内存NewSize                  = 89128960 (85.0MB)      # 新生代初始大小MaxNewSize               = 1431306240 (1365.0MB)  # 新生代最大大小OldSize                  = 179306496 (171.0MB)    # 老年代大小NewRatio                 = 2                      # 新生代:老年代比例SurvivorRatio            = 8                      # Eden:Survivor比例MetaspaceSize            = 21807104 (20.796875MB) # 元空间初始大小CompressedClassSpaceSize = 1073741824 (1024.0MB)G1HeapRegionSize         = 0 (0.0MB)Heap Usage:  # 堆内存使用情况
PS Young Generation  # 新生代(Parallel Scavenge)
Eden Space:          # Eden区capacity = 67108864 (64.0MB)used     = 16777216 (16.0MB)free     = 50331648 (48.0MB)25.0% used
From Space:          # Survivor区(From)capacity = 1048576 (1.0MB)used     = 0 (0.0MB)free     = 1048576 (1.0MB)0.0% used
To Space:            # Survivor区(To)capacity = 1048576 (1.0MB)used     = 0 (0.0MB)free     = 1048576 (1.0MB)0.0% used
PS Old Generation    # 老年代(Parallel Old)capacity = 179306496 (171.0MB)used     = 0 (0.0MB)free     = 179306496 (171.0MB)0.0% used3189 interned Strings occupying 259768 bytes.

注意

  • 生成Heap Dump可能导致进程暂停,谨慎在生产环境使用!

4. jhat(JVM Heap Analysis Tool)

  • 作用:分析Heap Dump文件(内置简易HTTP服务器,通过浏览器查看结果)。

  • 缺点:功能简单,性能较差,推荐用Eclipse MAT替代。

  • 访问 http://localhost:7000 查看分析结果。


5. jstat(JVM Statistics Monitoring Tool)

是JVM统计监测工具。可以用来显示垃圾回收信息、类加载信息、新生代统计信息等。

作用

  • 实时监控JVM内存、GC、类加载等统计信息。

常用选项

  • -gcutil:显示GC分代区域使用率(百分比)
  • -gc:显示各分代内存容量和GC次数/时间

示例

  • 总结垃圾回收统计        

jstat -gcutil pid

  • 第一行是 幸存者区、Edne 区、老年代区、元数据
  • 第一行后面的是对应的 GC
  • 第二行是分区所占的比例

  • 垃圾回收统计

jstat -gc pid

输出关键字段

  • YGC/YGCT:Young GC次数/耗时
  • FGC/FGCT:Full GC次数/耗时
  • OGC/OU:Old区容量/使用量

2. 可视化工具

  • jconsole        用于对jvm的内存,线程,类的监控
  • VisualVM        能够监控线程,内存情况

2.1 JConsole

用于对jvm的内存,线程,类的监控,是一个基于jmx 的 GUI性能监控工具
打开方式:java 安装目录 bin目录下 直接启动jconsole.exe 就行

基本介绍

  • 所属:JDK自带(位于bin/jconsole.exebin/jconsole)。

  • 功能定位:轻量级基础监控,适合快速查看JVM基础状态。

核心功能

功能模块说明
内存监控实时显示堆(Heap/Non-Heap)、各代(Eden/Old/Survivor)内存使用曲线。
线程监控查看线程数、状态(运行/阻塞/等待),支持检测死锁。
类加载监控已加载/卸载的类数量。
MBean通过JMX查看/操作JVM和应用的MBean属性(如GC次数、线程池参数)。
连接方式

支持本地进程直接连接或远程JMX连接。

优缺点

  • 优点

    • 无需安装,开箱即用。

    • 低开销,适合生产环境基础监控。

  • 缺点

    • 功能较基础,缺少高级分析(如内存泄漏分析)。

    • 界面较老旧,交互体验一般。

 启动命令

jconsole <pid>  # 本地连接
jconsole hostname:port  # 远程JMX连接

2.2 VisualVM

能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈
打开方式:java 安装目录 bin目录下 直接启动 ivisualvm.exe就行

基本介绍

  • 所属:曾为JDK自带(JDK 9后需单独下载)。

  • 功能定位:功能全面的JVM分析工具,支持插件扩展。

核心功能

功能模块说明
内存/CPU监控实时堆内存、Metaspace、CPU使用率图表,支持手动执行GC。
线程分析可视化线程状态、时间线,支持线程转储和死锁检测。
抽样器可对CPU或内存进行抽样分析(定位热点方法/对象)。
Heap Dump生成和分析堆转储文件(查看大对象、类实例分布)。
插件扩展支持安装插件(如Visual GC、BTrace),增强GC分析或动态追踪能力。

优缺点

  • 优点

    • 功能全面,支持插件扩展(如Visual GC插件可直观展示各代内存变化)。

    • 提供Heap Dump和线程快照分析,适合开发环境调试。

  • 缺点

    • 对生产环境有一定开销(尤其是抽样分析时)。

    • 需要手动安装,高版本JDK需单独下载。

启动命令

jvisualvm  # 启动VisualVM(需在JDK bin目录下或配置环境变量)

2.3 对比总结

特性JConsoleVisualVM
内存监控基础图表详细图表 + Heap Dump分析
线程分析基础状态/死锁检测时间线可视化 + 线程快照
GC监控仅通过MBean查看GC次数Visual GC插件展示各代内存回收细节
CPU分析不支持抽样器定位热点方法
插件系统支持(如BTrace动态追踪)
适用场景生产环境快速检查开发/测试环境深度分析

3. 问题总结

3.1  说一下 JVM 调优的工具?

命令工具

  • jps        进程状态信息
  • jstack        查看java进程内线程的堆栈信息
  • jmap        查看堆转信息
  • jhat        堆转储快照分析工具
  • jstat        JVM统计监测工具

可视化工具

  • jconsole用于对jvm的内存,线程,类 的监控
  • VisualVM能够监控线程,内存情况
http://www.dtcms.com/a/277863.html

相关文章:

  • 华为OD 处理器
  • 格密码--LWE,DLWE和ss-LWE
  • 【王树森推荐系统】重排04:DPP 多样性算法(上)
  • python学习打卡:DAY 45 Tensorboard使用介绍
  • 言语理解高频词之生僻成语
  • 驱动开发(3)|rk356x驱动GPIO基础应用之点亮led灯
  • idea docker插件连接docker失败
  • [RPA] 批量数据抓取指定商品名称信息
  • Pandas-数据清洗与处理
  • Spring高级特性——反射和动态代理的性能优化
  • SQL预编译:安全高效数据库操作的关键
  • 《1.5倍与2倍的扩容密码:Java容器的内存性能抉择》
  • 【牛客刷题】四个选项:高考选择题方案统计(并查集+动态规划)
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • TensorFlow深度学习实战(25)——变分自编码器详解与实现
  • 工作流执行路径的有效性
  • 零基础入门物联网-远程门禁开关:软件安装
  • 014_批处理与大规模任务
  • 【容器】资源平台初探 - K8s核心资源全解析:从Pod到StatefulSet
  • 板凳-------Mysql cookbook学习 (十一--------8)
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)
  • 算法入门--动态规划(C++)
  • Ribbon实战
  • 【枚举+差分】P6070 『MdOI R1』Decrease
  • RAG升级:Re-rank模型微调,实现极致检索精度
  • 【读书笔记】《C++ Software Design》第八章 The Type Erasure Design Pattern
  • 虚拟线程,多线程,单线程
  • 小白成长之路-LVS
  • 神经网络的基础原理介绍(网络、传播、梯度、以及一些常见的神经网络原型介绍)
  • 【设计模式】策略模式(政策(Policy)模式)