jmap内存的分析工具
1、命令基本概述
- Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
- 打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
- 使用方法 jmap -histo pid。如果使用SHELL ,可采用jmap -histo pid>a.log日志将其保存到文件 中,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
- jmap -dump:format=b,file=outfile 3024可以 将3024进程的内存heap输出出来到outfile文件里,再配合MAT(内存分析工具)。
2、命令格式
jmap [option] <pid>
参数:
- option:选项参数,不可同时使用多个选项参数
- pid:java进程id,命令ps -ef | grep java获取
- executable:产生核心dump的java可执行文件
- core:需要打印配置信息的核心文件
- remote-hostname-or-ip:远程调试的主机名或ip
- server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器
参数列表:
- heap : 显示Java堆的相关信息
- histo : 显示堆中对象的统计信息
- permstat : Java堆内存的永久保存区域的类加载器的统计信息
- finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
- dump : 生成堆转储快照
- F : 当-dump没有响应时,强制生成dump快照
3、实例
1) jmap -heap pid 可显示java内存信息、垃圾收集器的信息
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
[root@bigdata9 bin]# jmap -heap 24076 Attaching to process ID 24076, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.275-b01 using thread-local object allocation. #新生代采用的是并行线程处理方式 Parallel GC with 2 thread(s) #具有2个线程的并行GC Heap Configuration: #堆配置情况 MinHeapFreeRatio = 0 #最小堆使用比例 MaxHeapFreeRatio = 10 #最大堆使用比例 MaxHeapSize = 4164943872 (3972.0MB) #最大堆空间大小 NewSize = 87031808 (83.0MB) #新生代分配大小 MaxNewSize = 1388314624 (1324.0MB) #最大可新生代分配大小 OldSize = 175112192 (167.0MB) #老年代大小 NewRatio = 2 #新生代比例 SurvivorRatio = 8 #新生代与suvivor的比例 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: #堆使用情况 PS Young Generation Eden Space: capacity = 1366294528 (1303.0MB) #伊甸区容量 used = 979745288 (934.3579177856445MB) free = 386549240 (368.64208221435547MB) 71.70820550925899% used From Space: #survior1区 capacity = 10485760 (10.0MB) #survior1区容量 used = 1704024 (1.6250839233398438MB) free = 8781736 (8.374916076660156MB) 16.250839233398438% used To Space: #survior2 区 capacity = 11010048 (10.5MB) #survior2区容量 used = 0 (0.0MB) free = 11010048 (10.5MB) 0.0% used PS Old Generation #老年代区 capacity = 505937920 (482.5MB) used = 252855160 (241.14147186279297MB) free = 253082760 (241.35852813720703MB) 49.97750712182238% used
ps Perm Generation: ##持久代区使用情况
capacity = 134217728 (128.0MB) ##持久代区容量
used = 47303016 (45.111671447753906MB)
free = 86914712 (82.8883285522461MB)
35.24349331855774% used ##perm区使用比例
37364 interned Strings occupying 4293216 bytes.
2)jmap -histo:live pid 查看堆中对象的信息
获取每个class的实例数目,字节数,类全名信息。如果live子参数加上后,只统计活的对象数量
jmap -histo:live 24971 | grep grep可以过滤想要看的信息
如图 instances:实例数量 bytes:大小 classname:类名
3)获取正等候回收的对象的信息
jmap -finalizerinfo pid
#等候回收的对象为0个
4、jmap分析内存溢出/泄漏
jmap -dump:live,format=b,file=文件路径/文件名 pid
- live:就是只dump 活着的对象
- format=b 使用二进制
- file= 快照文件保存路径
工具参考:https://blog.csdn.net/qq_43545600/article/details/119801795
posted on 2022-05-25 15:11 uestc2007 阅读(1767) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性