jmap [option] <pid>

关于 option 的选项,有下面这么几个

1,jmap -dump:[live,] format=b, file=filename  pid

jmap -F -dump:format=b,file=tomcat.txt 113089

以hprof二进制格式转储Java堆到指定filename tomcat.txt 的文件中。live子选项是可选的。如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览heap dump,你可以使用jhat(Java堆分析工具)读取生成的文件。

这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用。

确实运行的比较久哟,等不了啦,ctrl + c 啦。一会儿功夫都100多兆了。既然线上慎用,那估计就是用不了啦。

2,jmap  -finalizerinfo pid

打印正等候回收的对象的信息

jmap -finalizerinfo 757471

运行2次都是0,finalizer 这个单词是终结的意思

3,jmap -heap pid

jmap -heap 757471

打印heap的概要信息,GC使用的算法,heap(堆)的配置及JVM堆内存的使用情况.

jmap -heap 757471

下面是命令的输出情况:
Attaching to process ID 757471, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.131-b11

using parallel threads in the new generation.//在新一代中使用并行线程
using thread-local object allocation.//使用线程本地对象分配
Concurrent Mark-Sweep GC//cms gc

对比这简单的翻译看1看。1.8的jdk。

堆的设置里面出现的几个值的解释。

-XX:MinHeapFreeRatio=percent 
设置垃圾收集事件后允许的最小可用堆空间百分比(0到100)。如果可用堆空间低于此值,则将扩展堆。默认情况下,此值设置为40%

-XX:MaxHeapFreeRatio=percent 
设置GC事件后允许的最大可用堆空间百分比(0到100)。如果空闲堆空间扩展到该值之上,则堆将收缩。默认情况下,此值设置为70%

-XX:MaxHeapSize=size
设置内存分配池的最大大小(在byes中)。这个值必须是1024的倍数并且大于2mb。附加字母k或k表示千字节,m或m表示兆字节,g或g表示千兆字节。默认值是在运行时根据系统配置选择的。对于服务器部署,
-XX:InitialHeapSize和-XX:MaxHeapSize通常设置为相同的值

-XX:NewSize=size
设置年轻代(托儿所)堆的初始大小(以字节为单位)。附加字母k或k表示千字节,m或m表示兆字节,g或g表示千兆字节
堆的年轻代区域用于新对象。与其他区域相比,在这个区域执行GC的频率更高。如果年轻代的大小太低,那么将执行大量的次要gc。
如果大小过大,则只执行完整的gc,这可能需要很长时间才能完成。
Oracle建议将年轻代的大小保持在总体堆大小的一半到四分之一之间。

-XX:MaxNewSize=size
设置年轻代(托儿所)堆的最大大小(以字节为单位)。默认值的设置符合人体工程学

OldSize
就字面意思吧

-XX:NewRatio=ratio
设置年轻一代和老一代人的比例。默认情况下,此选项设置为2。

-XX:SurvivorRatio=ratio
设置eden空间大小与幸存者空间大小之间的比率。默认情况下,此选项设置为8。

-XX:MetaspaceSize=size
设置分配的类元数据空间的大小,该空间在第一次超过时将触发垃圾收集。垃圾收集的此阈值将根据使用的元数据量增加或减少。默认大小取决于平台

CompressedClassSpaceSize
字面意思,压缩 类 空间 大小

-XX:MaxMetaspaceSize=size
设置可以为类元数据分配的最大本机内存量。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身、其他正在运行的应用程序和系统上可用的内存量

-XX:G1HeapRegionSize=size
设置在使用垃圾优先(G1)收集器时细分Java堆的区域的大小。这个值可以在1mb到32mb之间。默认的区域大小是根据人体工程学的堆大小决定的,因为使用的是cms gc收集器不是G 1 收集器,所以这个没用。G 1收集器是把内存分成n 个大小的region。。。。

下面就是heap里面的年轻代的eden和2个s区一个from一个to

capacity 容量容积,used使用的 free未使用的

concurrent mark-sweep generation:的大小和上面的old size大小一样,说明是同一个地方。

interned String类有个intern()方法,是将字符串放到字符串常量池中。

这个意思也就差不多了。

再结合一下这个进程的启动各种参数看一看

4,jmap -histo:live 113089

打印堆的直方图。对于每个Java类,将打印对象数量、内存大小(以字节为单位)和完全限定的类名。JVM内部类名使用星号(*)前缀打印。如果指定了活动子选项,则只计算活动对象

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

jmap -histo:live 113089 > histo.txt

把结果输出到histo.txt文件中,方便查看。因为一下子输出太多,页面展示不下。

5,jmap -clstats pid

打印Java堆的类装入器wise统计信息。对于每个类装入器,都会打印它的名称、活动程度、地址、父类装入器以及它装入的类的数量和大小

jmap -clstats 961012

不了解类加载机制,这个看不懂。

6,-F是参数,强制的意思,与其它几个一起使用

jmap的用法:Java 内存映像工具 jmap -heap pid相关推荐

  1. jmap:java内存映像工具【详细】

    目录 jmap概述: jmap 命令格式 jmap -heap mid -histo[:live] mid jmap -finalizerinfo mid jamp -dump:[live,] for ...

  2. java内存溢出分析工具:jmap使用实战

    java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap.  1 使用命令  在环境是linux+jdk1.5以上,这个工具是自带的,路 ...

  3. java分析内存泄露工具_Eclipse Memory Analyzer(Java内存泄漏分析工具)

    概述 一个大型的Java项目也许从开发到测试结束并未发现一些大的问题,但是在生产环境中还是会出现一些非常棘手的问题,如内存泄漏,遇到这样的问题对于一个经验尚浅的开发人员来说难度非常大,好的一点是JVM ...

  4. 深入理解java虚拟机(九)基础故障处理工具(jmap、jhat、jstack等)

    文章目录 前言 一.jps:虚拟机进程状况工具 二.jstat:虚拟机统计信息监视工具 三.jinfo: Java配置信息工具 四.jmap: Java内存映像工具 五.jhat:虚拟机堆转储快照分析 ...

  5. Java内存泄露和内存溢出、JVM命令行工具、.JDK可视化工具、Java Class文件

    1.Java内存泄露和内存溢出对比 1.1 Java 内存泄露 内存泄露是指一个不再被程序使用的对象或变量还在内存中占用空间. 1.1.1判断内存空间是否符合垃圾回收的标准 在Java语言中,判断一个 ...

  6. Java内存组成GC算法

    Java内存组成&GC算法 @(JAVA)[java] Java内存组成GC算法 一内存组成 一Java程序的内存组成 1Java堆 2方法区含常量池永久代 3栈 1Java虚拟机栈 2本地方 ...

  7. JAVA内存泄露分析和解决方案及WINDOWS自带查看工具

    JAVA内存泄露分析和解决方案及WINDOWS自带查看工具 Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最 ...

  8. unity如何检测内存泄漏_如何排查Java内存泄漏?看懂这一篇就够用了

    原文:https://www.toptal.com/java/hunting-memory-leaks-in-java 作者:Jose Ferreirade Souza Filho 译者:Emma来源 ...

  9. java内存泄露分析方案

    java内存泄露分析方案 - 准备工作 1.工具:Memory Analyzer Tool (mat); 1)安装Memory Analyzer Tool (mat) 2.原料:dump.hprof ...

最新文章

  1. Angular Http
  2. 在 Linux 中用Seahorse管理你的密码和加密密钥
  3. 负载均衡算法-最少连接数均衡
  4. ACE .i .inl文件(转)
  5. (转)C# 3.0 LINQ 的演变及其对 C# 设计的影响
  6. MFC窗口标题栏隐藏
  7. 蔚来汽车发布声明:“蔚来EC6爆炸”为谣言
  8. spring相互依赖怎么解决_被问到Spring循环依赖怎么解决?秀给面试官看!内附图解...
  9. idea中ssm集成freemark_基于SSM框架的迷你天猫商城
  10. 【180929】仿微信飞机大战游戏源码
  11. PNG生成多尺寸ico文件,开发桌面应用必备
  12. selenium小白学习笔记(6) - 使用parameterized参数化
  13. phpmyadmin没有接收到要导入的数据.可能是文件名没有提交,也可能是文件大小超出 PHP 限制.
  14. 我就发布个夏泽网注册码
  15. 2017蓝桥杯B组国赛 瓷砖样式
  16. 图片无缝拼接 html,snapseed如何无缝拼接图片
  17. 重构ElementUI解决DatePicker日期选择组件修改父组件placement参数问题[Vue.js项目实践: 新冠自检系统]
  18. 图像处理(九)——图像分析
  19. 09.2. 长短期记忆网络(LSTM)
  20. Spring 夺命 35 问!

热门文章

  1. flask框架之闪现消息提示
  2. 备抵附加账户的期末余额_备抵附加账户的期末余额不是固定的,当其余额在借方时...
  3. postgresql 数据库 报错 FATAL: the database system is shutting down 解决方法
  4. oracle 10G 升级到11G
  5. 打怪升级js,随机产生一只苍蝇,点击消失
  6. 【微信小程序】e.target.id和e.currentTarget.dataset.id的区别
  7. 应用集成的尴尬 (转)
  8. 北京尚学堂--单例模式笔记
  9. Qt6.1教程:Qt Quick3D渲染实例
  10. 2022第六季完美童模 合肥赛区 决赛圆满落幕