当前位置:网站首页>JVM命令之- jmap:导出内存映像文件&内存使用情况
JVM命令之- jmap:导出内存映像文件&内存使用情况
2022-07-07 00:46:00 【张俊杰1994】
学习 尚硅谷 宋红康 JVM从入门到精通 的学习笔记
概述
jmap全称 JVM Memory Map.作用之一是获取dump文件(堆转储快照文件,二进制文件),还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息,类加载信息等等。
dump文件(堆转储快照文件,二进制文件)是当前时刻内存中的一些对象一些数据占用内存的大小的记录这样的情况,是一个二进制的文件,需要用专门的工具来打开。
基本语法

1.使用语法可以通过在DOS窗口中使用jmap/jmap -h/jmap -help查看
2.<executable 代表可执行的代码,比如使用> 文件名称来指定生成的dump文件的生成位置
3.[[email protected]]<……>是为远程连接准备的
基本语法
-dump
生成Java堆转储快照:dump文件
特别的:-dump:live只保存堆中的存活对象
-heap
输出整个堆空间的详细信息,包括GC的使用、堆配置信息,以及内存的使用信息等
-histo
输出堆中对象的同级信息,包括类、实例数量和合计容量
特别的:-histo:live只统计堆中的存活对象
-permstat
以ClassLoader为统计口径输出永久代的内存状态信息
仅linux/solaris平台有效
-finalizerinfo
显示在F-Queue中等待Finalizer线程执行finalize方法的对象
仅linux/solaris平台有效
-F
当虚拟机进程对-dump选项没有任何响应时,可使用此选项强制执行生成dump文件
-h | -help
jamp工具使用的帮助命令
-J
传递参数给jmap启动的jvm
演示
使用1:导出内存映像文件(dump文件)


注意:
- 对于以上说明中的第1点是自动方式才会这样做,而手动不会在Full GC之后生成Dump
- 使用手动方式生成dump文件,一般指令执行之后就会生成,不用等到快出现OOM的时候
- 使用自动方式生成dump文件,当出现OOM之前先生成dump文件
- 如果使用手动方式,一般使用第2种,毕竟生成堆中存活对象的dump文件是比较小的,便于传输和分析
手动的方式
jmap -dump:format=b,file=<filename.hprof> <pid>
jmap -dump:live,format=b,file=<filename.hprof> <pid>



生产dump文件

你会发现导出的hprof文件会越来越大,就是因为随着应用的执行,相关的数据也会越来越多,当然如果你参数配置带有-dump:live参数的话,代表hprof只保存堆中存货的对象. , 那么你生成的hprof文件也有可能会变小.
在实际的生产环境中,你生成的hprof文件可能会有几百mb大小,这样文件就有点大了,dump指令如果带有live之后,这样hprof文件可能就不会那么大了, 实际情况下oom 情况大多数原因是gc回收不走的对象存活导致的,所以实际生产环境,绝大多数都是用-dump:live指令
自动的方式
当程序发生oom退出应用的时候,一些顺势信息都会随着程序的终止而消失,这样重现oom问题就比较困难了,如果能在发生oom的时候,自动导出dump文件就更好了.
-XX:+HeapDumpOnOutOfMemoryError:在程序发生oom的时候,导出应用程序的当前dump文件.
-XX:HeapDumpPath=<filename.hprof> 指定堆快照的保存位置..
比如:
-Xmx100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\m.hprof
具体使用如下:


启动程序之后等待

当发生oom的一瞬间,立马就生成了一个hprof文件出来
使用2:显示堆内存相关信息
jmap -heap 进程id
jmap -heap 进程id只是时间点上的堆信息,而jstat后面可以添加参数,可以指定时间动态观察数据改变情况,而图形化界面工具,例如jvisualvm等,它们可以用图表的方式动态展示出相关信息,更加直观明了
例子如下:

文件内容:
文件内容有堆空间的配置信息, 新生代和老年代的占用情况,
jmap -histo 进程id
输出堆中对象的同级信息,包括类、实例数量和合计容量,也是这一时刻的内存中的对象信息
例子如下:
边栏推荐
- 往图片添加椒盐噪声或高斯噪声
- Interview questions and salary and welfare of Shanghai byte
- 980. Different path III DFS
- Win configuration PM2 boot auto start node project
- 如果不知道这4种缓存模式,敢说懂缓存吗?
- Why does the data center need a set of infrastructure visual management system
- Industrial Finance 3.0: financial technology of "dredging blood vessels"
- 力扣102题:二叉树的层序遍历
- Reptile exercises (III)
- PTA ladder game exercise set l2-004 search tree judgment
猜你喜欢

Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture

Financial risk control practice - decision tree rule mining template

Convert numbers to string strings (to_string()) convert strings to int sharp tools stoi();

Question 102: sequence traversal of binary tree

Detailed explanation of platform device driver architecture in driver development

Bbox regression loss function in target detection -l2, smooth L1, IOU, giou, Diou, ciou, focal eiou, alpha IOU, Siou

Realize GDB remote debugging function between different network segments

Bat instruction processing details

Randomly generate session_ id

关于STC单片机“假死”状态的判别
随机推荐
STM32 key state machine 2 - state simplification and long press function addition
C. colonne Swapping [tri + Simulation]
How much do you know about clothing ERP?
PTA 天梯赛练习题集 L2-002 链表去重
JVM the truth you need to know
Reading notes of Clickhouse principle analysis and Application Practice (6)
SAP Spartacus checkout 流程的扩展(extend)实现介绍
EMMC打印cqhci: timeout for tag 10提示分析与解决
Data storage 3
@pathvariable 和 @Requestparam的详细区别
【日常训练--腾讯精选50】235. 二叉搜索树的最近公共祖先
Pytorch builds neural network to predict temperature
Realize GDB remote debugging function between different network segments
R language [logic control] [mathematical operation]
Go 语言的 Context 详解
Nodejs get client IP
Flask 1.1.4 werkzeug1.0.1 analyse du code source: processus de démarrage
980. Different path III DFS
New Year Fireworks code plus copy, are you sure you don't want to have a look
产业金融3.0:“疏通血管”的金融科技