当前位置:网站首页 > 技术博客 > 正文

jmap的常用命令



本次博客测试环境使用的是,系统使用

jmap是一个多功能的命令,也是jdk自带的命令,是我们在开发过程中用来虚拟机性能能分析和故障解决必不可少的工具之一,它可以生产java程序的堆栈()文件;也可以查看堆内的对象信息、 类加载信息以及队列(java将要回收的垃圾队列);另外,jmap没有图形界面,所有的操作都是在命令行完成的。

命令格式:

 

options参数命令详解

  • no option:不带参数查询进程,就像这样,查看内存中共享对象信息;,类似Solaris pmap命令;
  • heap: 显示java堆详细信息
  • histo[:live] :显示堆中对象的统计信息,加值打印存活的对象,如果不加则查询所有的对象;
  • clstats:打印类加载信息
  • finalizerinfo:显示在F-Queue队列等待被清理的对象;在发生GC之前某些对象可能要被回收,那么在回收之前,这些对象就会放到F-Queue队列中;清理时会执行对象的方法;
  • dump :生成堆转储快照;

在测试每个参数之前,我们先用jps命令看看linux系统中有哪些java进程
在这里插入图片描述
太好了,有一个可以用的,这是我自己线上的项目,进程为,等下就拿这个进程来测试;

 

通过结果可以看到:

  • 第一列打印的16进制是每个共享对象的其实地址
  • 第二列是对象的映射大小
  • 第三列是共享对象文件的路径全称

只是对于我们开发人员来说,这些信息对我们没有多大作用,所以了解一下即可,没必要深究。
在这里插入图片描述

 

打印结果如下

 
heap 结果说明

  • 空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 40。如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。

  • 空闲堆空间的最大百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 70。如果HeapFreeRatio > MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后。

  • JVM 堆空间允许的最大值。

  • JVM 新生代堆空间的默认值。

  • JVM 新生代堆空间允许的最大值。

  • JVM 老年代堆空间的默认值。

  • 新生代(2个Survivor区和Eden区 )与老年代(不包括永久区)的堆空间比值,表示新生代:老年代=1:2。

  • 两个Survivor区和Eden区的堆空间比值为 8,表示 S0 : S1 :Eden = 1:1:8。

  • JVM 元空间的默认值。

  • Compressed Class Space 空间大小限制

  • JVM 元空间允许的最大值。

  • 在使用 G1 垃圾回收算法时,JVM 会将 Heap 空间分隔为若干个 Region,该参数用来指定每个 Region 空间的大小。
Heap Usage:
 

新生代内存使用情况(伊甸区 + 1个Survivor区(S0区或S1区))

(容量):一共有21.375M
:已使用13.6M
:剩余7.7M
:63.83%

:伊甸区使用情况
:from区 (Survivor区)使用情况
:to区(Survivor区)使用情况
:老年代使用情况

 

打印结果如下,默认会以占用的大小倒序排列;

 

如果我们想要打印占用空前最多的前5个对象,可以这么写:

 

其中,表示打印结果的从头8行的内容,因为表头和横线还需要占一些空间;所以最终显示的就是有5行内容

结果说明

: 第一列为行号
: 第二列为对象的实例数量
: 第三列为对象占用总大小,单位:字节
: 第四列为类的全局限定名,这里需要注意,表示数组,表示数组,表示数组

 

输入这个命令后需要等一会,我的linux配置比较低,等了一分钟才出来结果;所以这边使用windows系统来执行命令,结果如下
在这里插入图片描述

 

打印结果如下,可以看到最后一行显示为0,表示当前队列中没有被清理的对象;这是因为垃圾清理过程的速度非常快,是毫秒级别的,所以大部分时间,这个队列里都是没有对象的,

 
 

在执行之前,先说明下这个命令的参数

: 只打印存活的对象
:以二进制的格式进行存储
:将文件保存到当前目录,文件名称为jmap.bin

打印结果如下

 

这时候堆转储快照就已经生成了,二进制文件已经保存到目录:了。
在这里插入图片描述
因为是二进制文件,所以这里面的信息直接看是看不到的
在这里插入图片描述
这个堆转储文件需要用命令或者 打开, 是图形界面,观看更加直观些,这个工具因为使用起来会启动内置的Http的服务器,生成的结果可在浏览器中观看,但是jhat这个工具现在已经很少使用了,主要原因有2个

  • 1是这个功能比较简陋,因为有了其他更强大的工具来分析,比如
  • 2是一般不会在部署了应用程序的服务器上直接分析dump文件,就算要分析,也会拷贝到其他机器上进行分析,因为分析工作既耗时又耗硬件资源;除非逼不得已,不然不会这么做;

使用打开,命令如下,启动后就会启动内置的服务器,默认端口号:;启动后直接在浏览器访问:即可

 

在这里插入图片描述

其实jmap是一个不可替代的工具,至少当现在为止还没有出现替代的工具,在线上项目调优时,使用命令会比较方便查看内存泄漏的原因,阿里巴巴的工具目前也还没有jmap的histo功能;这就是它不可替换的原因;

  • 上一篇: 一句话木马图片
  • 下一篇: maven 安装配置
  • 版权声明


    相关文章:

  • 一句话木马图片2025-01-01 14:30:05
  • swing实现画图2025-01-01 14:30:05
  • windows查看当前目录下所有文件2025-01-01 14:30:05
  • malloc函数写法2025-01-01 14:30:05
  • 基于单片机的ds1302电子时钟设计2025-01-01 14:30:05
  • maven 安装配置2025-01-01 14:30:05
  • 黑客软件查姓名手机号2025-01-01 14:30:05
  • 计算机组成原理视频教程2025-01-01 14:30:05
  • dqn详解2025-01-01 14:30:05
  • oracle nextday2025-01-01 14:30:05