当前位置:网站首页>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
输出堆中对象的同级信息,包括类、实例数量和合计容量,也是这一时刻的内存中的对象信息
例子如下:
边栏推荐
- Personal imitation SSM framework
- 驱动开发中platform设备驱动架构详解
- PTA 天梯赛练习题集 L2-002 链表去重
- Financial risk control practice - decision tree rule mining template
- 【SQL实战】一条SQL统计全国各地疫情分布情况
- Type de texte de commutation d'entrée et de mot de passe de l'applet natif
- SQLSTATE[HY000][1130] Host ‘host. docker. internal‘ is not allowed to connect to this MySQL server
- 老板总问我进展,是不信任我吗?(你觉得呢)
- Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
- 职场经历反馈给初入职场的程序员
猜你喜欢
每秒10W次分词搜索,产品经理又提了一个需求!!!(收藏)
SAP Spartacus checkout 流程的扩展(extend)实现介绍
PTA 天梯赛练习题集 L2-004 搜索树判断
ML's shap: Based on the adult census income binary prediction data set (whether the predicted annual income exceeds 50K), use the shap decision diagram combined with the lightgbm model to realize the
Convert numbers to string strings (to_string()) convert strings to int sharp tools stoi();
驱动开发中platform设备驱动架构详解
如何提高网站权重
Message queuing: how to ensure that messages are not lost
EMMC打印cqhci: timeout for tag 10提示分析与解决
Message queue: how to deal with message backlog?
随机推荐
Harmonyos practice - Introduction to development, analysis of atomized services
win配置pm2开机自启node项目
Sidecar mode
PTA 天梯赛练习题集 L2-002 链表去重
404 not found service cannot be reached in SAP WebService test
zabbix_ Get test database failed
Opensergo is about to release v1alpha1, which will enrich the service governance capabilities of the full link heterogeneous architecture
mac版php装xdebug环境(m1版)
Value range of various datetimes in SQL Server 2008
目标检测中的损失函数与正负样本分配:RetinaNet与Focal loss
zabbix_get测试数据库失败
Three level menu data implementation, nested three-level menu data
Flask1.1.4 werkzeug1.0.1 source code analysis: start the process
@pathvariable 和 @Requestparam的详细区别
Forkjoin is the most comprehensive and detailed explanation (from principle design to use diagram)
Go语学习笔记 - gorm使用 - gorm处理错误 | Web框架Gin(十)
【SQL实战】一条SQL统计全国各地疫情分布情况
Determine whether the file is a DICOM file
TCC of distributed transaction solutions
上海字节面试问题及薪资福利