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   uestc2007  阅读(1767)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示