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

jmap命令详解

jmap 用于生成 heap dump 文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现 OOM 的时候自动生成 dump 文件。

jmap 不仅可以生成 dump 文件,还可以查询finalize执行队列、Java 堆的详细信息,如当前使用率、当前使用的是哪种收集器等。

命令的使用格式如下。

jmap [option] LVMID

option 参数详解:

  • dump : 生成堆转储快照
  • finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
  • heap : 显示Java堆详细信息
  • histo : 显示堆中对象的统计信息
  • clstats : 显示类加载器信息
  • F : 当-dump没有响应时,强制生成dump快照
选项作用
-dump生成java堆转储快照,格式为dump:[live,]format=b,file=,其中live子参数指定是否只dump出存活对象。
-finalizerinfo显示在F-Queue中等待Finerlizer线程执行 finalize方法的对象,只在linux/Solaries平台下有效
-heap显示java堆详细信息,包括使用哪种垃圾收集器、参数配置、分代状况等,只在linux/Solaries平台下有效
-permstat以ClassLoader 为统计口径显示永久代内存状态,只在linux/Solaries平台下有效
-histo显示堆中对象统计信息,包括类、实例数量、合计容量
-F当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成dump快照,只在linux/Solaries平台下有效

option 参数使用如下。

1、示例参数:dump

-dump参数用于生成堆内存快照文件。

命令的使用格式如下。

-dump::live,format=b,file=<filename> pid

option 参数详解:

  • live : 指的是活着的对象
  • format : 表示指定的输出格式
  • file : 表示指定的文件名
  • pid : 表示 Java 服务进程ID

在操作系统终端输入如下命令,即可查看相关信息,示例如下。

$ jmap -dump:live,format=b,file=dump.hprof 20094
Dumping heap to /xxx/dump.hprof ...
Heap dump file created

dump.hprof这个后缀是为了后续可以直接用 MAT (Memory Anlysis Tool) 工具打开。

2、示例参数:finalizerinfo

-finalizerinfo参数用于打印等待回收对象的信息。

在操作系统终端输入如下命令,即可查看相关信息,示例如下。

$ jmap -finalizerinfo 20094
Attaching to process ID 20094, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Number of objects pending for finalization: 0

从日志中可以得出,当前 F-QUEUE 队列中并没有等待 Finalizer 线程执行 finalizer 方法的对象。

3、示例参数:heap

-heap参数用于打印 heap 的概要信息,GC 使用的算法,heap 的配置及 wise heap 的使用情况,可以用此来判断内存目前的使用情况以及垃圾回收情况。

在操作系统终端输入如下命令,即可查看相关信息,示例如下。

$ jmap -heap 20094
Attaching to process ID 20094, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08using thread-local object allocation.
Mark Sweep Compact GCHeap Configuration:MinHeapFreeRatio         = 40MaxHeapFreeRatio         = 70MaxHeapSize              = 461373440 (440.0MB)NewSize                  = 9764864 (9.3125MB)MaxNewSize               = 153747456 (146.625MB)OldSize                  = 19595264 (18.6875MB)NewRatio                 = 2SurvivorRatio            = 8MetaspaceSize            = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)Heap Usage:
New Generation (Eden + 1 Survivor Space):capacity = 17825792 (17.0MB)used     = 239848 (0.22873687744140625MB)free     = 17585944 (16.771263122558594MB)1.345511043772978% used
Eden Space:capacity = 15859712 (15.125MB)used     = 239848 (0.22873687744140625MB)free     = 15619864 (14.896263122558594MB)1.5123099334969008% used
From Space:capacity = 1966080 (1.875MB)used     = 0 (0.0MB)free     = 1966080 (1.875MB)0.0% used
To Space:capacity = 1966080 (1.875MB)used     = 0 (0.0MB)free     = 1966080 (1.875MB)0.0% used
tenured generation:capacity = 39444480 (37.6171875MB)used     = 23665256 (22.568946838378906MB)free     = 15779224 (15.048240661621094MB)59.99636958073728% used21919 interned Strings occupying 2683112 bytes.

从日志中,可以很清楚的看到 Java 堆中各个区域目前的情况。

4、示例参数:histo

-histo参数用于打印堆的对象统计,包括对象数、内存大小等等。也可以带上live参数,比如-histo[:live]表示只打印存活的对象,如果不加就是查询全部对象。

在操作系统终端输入如下命令,即可查看相关信息,部分示例如下。

$ jmap -histo 20094num     #instances         #bytes  class name
----------------------------------------------1:         61030        8438336  [C2:          9918        2169120  [I3:         59981        1439544  java.lang.String4:          5112        1331136  [B5:         13532        1190816  java.lang.reflect.Method6:         10071        1125192  java.lang.Class7:         32196        1030272  java.util.concurrent.ConcurrentHashMap$Node8:          9593         572904  [Ljava.lang.Object;9:         15416         493312  java.util.HashMap$Node10:         12115         484600  java.util.LinkedHashMap$Entry...

其中class name列指的是对象类型,部分内容详解:

B:byte C:char D:double F:float I:int J:long Z:boolean [I:表示 int[]的数组 [L+类名:其他数组对象

5、示例参数:clstats

-clstats参数用于打印类加载器信息。

在操作系统终端输入如下命令,即可查看相关信息,部分示例如下。

$ jmap -clstats 20094
Attaching to process ID 20094, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08

表示当前并没有相关类加载的信息。

6、示例参数:F

-F参数表示强制模式。在 pid 没有响应的时候使用-dump或者-histo参数,在这个模式下live子参数会无效。

http://www.lryc.cn/news/529634.html

相关文章:

  • 微机原理与接口技术期末大作业——4位抢答器仿真
  • FOC核心原理的C语言实现
  • 基于互联网+智慧水务信息化整体解决方案
  • 【信息系统项目管理师-选择真题】2005下半年综合知识答案和详解
  • 计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习
  • 第十一章 F - H 开头的术语
  • 深度研究新范式:通过Ollama和DeepSeek R1实现自动化研究
  • 深度学习的应用
  • 基于51单片机和WS2812B彩色灯带的流水灯
  • DFS(深度优先搜索)与回溯算法详解
  • 服务器虚拟化技术详解与实战:架构、部署与优化
  • 数据分析系列--②RapidMiner导入数据和存储过程
  • CSS 背景与边框:从基础到高级应用
  • 国内外人工智能AI工具网站大全(一键收藏,应有尽有)
  • Java中初步使用websocket(springBoot版本)
  • 2025年大年初一篇,C#调用GPU并行计算推荐
  • K8S ReplicaSet 控制器
  • FreeRTOS学习 --- 任务调度
  • 【小鱼闪闪】单片机开发工具——米思齐软件下载安装(图文)
  • MFC开发,给对话框添加垂直滚动条并解决鼠标滚动响应的问题
  • 动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)
  • LevelDB 源码阅读:写入键值的工程实现和优化细节
  • 药店药品销售管理系统的设计与实现
  • 人格分裂(交互问答)-小白想懂Elasticsearch
  • 【论文投稿-第八届智能制造与自动化学术会议(IMA 2025)】HTML, CSS, JavaScript:三者的联系与区别
  • python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
  • 网络工程师 (9)文件管理
  • Java中的线程池参数(详解)
  • 2 MapReduce
  • 如何用函数去计算x年x月x日是(C#)