Java的内存映像工具,jmap,Memory Map for Java,用于生成堆转储快照,一般成为heapdump或者dump文件,出了获取dump文件,这个工具还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率、当前使用的是哪种收集器等。

先来看一下这个命令是怎么用的:

由此可见jmap的命令格式为:jmap [option]

option参数为:

no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。heap: 显示Java堆详细信息histo[:live]: 显示堆中对象的统计信息clstats:打印类加载器信息finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象dump::生成堆转储快照F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.help:打印帮助信息J:指定传递给运行jmap的JVM的参数

1、jmap -heap pid,显示Java堆详细信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

2、jmap -histo:live pid,显示堆中对象的统计信息,如果指定了live子选项,则只计算活动的对象。

打印的统计信息如下(包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名):

3、jmap -clstats pid,打印类加载器信息

-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据,打印Java堆内存的永久保存区域的类加载器的智能统计信息。

4、jmap -finalizerinfo pid,打印等待终结的对象信息

5、jmap -dump: pid,生成堆转储快照dump文件

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

生成了这个堆转储快照,接下来就到了jhat命令行工具的使用了,jhat是虚拟机堆转储快照分析工具,该命令与jmap配合使用,来分析jmap生成的堆转储快照,是对好基友。jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以在浏览器中查看。

注意:一般在生成环境中,不使用jhat命令行工具在部署服务器上直接来分析堆转储快照,因为分析堆转储快照是一个耗时且消耗硬件资源的过程,还有就是jhat的分析功能相对来说比较简陋,有比jhat更为先进的工具,例如EMA,IBM HA等,都是更强大更专业的分析功能。

先来看一下它的使用方法:

这些可选择的选项含义是:

-J 将运行时参数传递给运行jhat的JVM。例如,-J-Xmx512m设置使用的最大堆内存大小为512MB。-stack false/true关闭跟踪对象分配调用堆栈。注意,如果heap dump中的分配位置信息不可用,你必须设置此标识为false。此选项的默认值为true。-refs false/true关闭对象的引用跟踪。默认为true。默认情况下,反向指针(指向给定对象的对象,又叫做引用或外部引用)用于计算堆中的所有对象.-port port-number设置jhat的HTTP服务器的端口号。默认为7000。-exclude exclude-file指定一个数据成员列表的文件,这些数据成员将被排除在”reachable objects”查询的范围之外。举个例子,如果文件列有java.lang.String.value,那么,当计算指定对象”o”的可达对象列表时,涉及到java.lang.String.value字段的引用路径将会被忽略掉。-baseline baseline-dump-file指定一个基线heap dump。在两个heap dump(当前heap dump和基线heap dump)中存在相同对象ID的对象,不会被标记为”new”。其他的对象将被标记为”new”。这在比较两个不同的heap dump时非常有用。-debug int设置此工具的调试级别。0意味着没有调试输出。设置的值越高,输出的信息就越详细。-version 报告版本号并退出。-h|-help输出帮助信息并退出。

输入命令来分析刚才生成的堆转储文件:

打开浏览器来访问,端口为默认的7000:

在这个页面的最下方,有个Other Queries,点击不同的链接可以展示不同的内容:

比如我们点击“Show heap histogram” 链接,展示堆快照直方图:

这些JDK自带的工具,给予我们分析和排查问题带来了极大的方便,掌握这些工具,或者其他更强大和更完美的工具,让我们分析线上问题的时候,不再手足无措。

设置堆内存大小_jmap和jhat命令行工具的配合使用,更好的掌握堆内存状况相关推荐

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

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

  2. Redis 笔记(16)— info 指令和命令行工具(查看内存、状态、客户端连接数、监控服务器、扫描大key、采样服务器、执行批量命令等)

    Info 命令返回关于 Redis 服务器的各种信息和统计数值.通过给定可选的参数 section ,可以让命令只返回某一部分的信息. 1. 显示模块 server : 一般 Redis 服务器信息, ...

  3. dos命令行设置网络优先级_替代windows系统下cmd的10款命令行工具

    喜欢用linux系统的或者从事开发编程的朋友可能会经常用到命令行工具,下面会整理一些windows下命令行工具. 1.powershell 系统自带 powershell 它可以说cmd的升级版.补充 ...

  4. linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像

    原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...

  5. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...

    虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...

  6. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...

  7. jdk自带常用命令行工具使用

    转自:http://blog.csdn.net/winwill2012/article/details/46364923 jps命令使用 jps命令类似于Linux下的ps命令,用于列出当前正在运行的 ...

  8. JDK的命令行工具、故障处理分析工具

    目录 •写在前面 •jps虚拟机进程状况工具 •jstat虚拟机统计信息监视工具 •jinfo配置信息工具 •jmap内存映像工具 •jhat虚拟机堆转储快照分析工具 •jstack堆栈跟踪器 •JC ...

  9. JavaJDK中的命令行工具

    JavaJDK中的命令行工具 本文内容主要学习自<深入理解Java虚拟机>,超赞的一本书强烈推荐! 一,常用JDK监控和故障处理工具 命令名称 全称 用途 jstat JVM Statis ...

最新文章

  1. apache httpd server安装的一个问题
  2. 你的团队推行「敏捷」遇到多少坑?来看团队敏捷转型之旅必经12阶段
  3. tftp怎么给服务器传文件,TFTP文件传输工具使用
  4. POJ 2653 线段交
  5. linux防火墙添加端口并开闭防火墙
  6. Mac 技术篇-通过AppScript编写脚本实现设置快捷键打开指定程序实例演示
  7. android 新闻编辑,超机访问:ZOL手机新闻编辑背后的故事
  8. python变量和数据类型_python的变量和数据类型
  9. POJ2246 HDU1082 ZOJ1094 UVA442 Matrix Chain Multiplication题解
  10. 搭建和测试 Redis 主备和集群
  11. Deeplabv3+ 环境配置-Anaconda3 + Pytorch1.8 + Cuda10.1 + opencv3.2.0
  12. python多任务之——线程简述
  13. hdu1257----贪心最长上升子序列(最少拦截系统)
  14. unity linerenderer在Game窗口中任意画线
  15. 'gbk' codec can't decode byte 0x9d in position 7674: illegal multibyte sequence
  16. JAVA-Switch语句
  17. Webstorm克隆Git后npm install报错
  18. java beanshell_jmeter进阶之Beanshell引用Java代码
  19. 浏览器主页被hao123劫持之解决方案
  20. win10右键一直转圈_Windows系统鼠标右键突然一直转圈无法使用

热门文章

  1. http://www.cda.cn/view/25735.html
  2. mongodb数据库中插入数据
  3. 捋一捋js面向对象的继承问题
  4. Tensorflow学习教程------tfrecords数据格式生成与读取
  5. Javascript闭包——懂不懂由你,反正我是懂了
  6. 正则验证多个邮箱用分号隔开
  7. 汇编的艺术(01)sizeof operator
  8. CodeSmith实用技巧(八):生成的代码输出到文件中
  9. vue --- 全局配置过滤函数,使用moment函数来格式化时间
  10. DOM-12 【模拟桌面待讲评】鼠标事件深入、点击与拖拽分离、双击事件