【JVM命令系列】jmap
命令基本概述
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(内存分析工具)。
64位机上使用需要使用如下方式:
jmap -J-d64 -heap pid
命令格式
l jmap [ option ] pid
l jmap [ option ] executable core
l jmap [ option ] [server-id@]remote-hostname-or-IP
参数说明
1)、options:
l executable :产生core dump的java可执行程序;
l core 将被打印信息的core dump文件;
l remote-hostname-or-IP 远程debug服务的主机名或ip;
l server-id 唯一id,假如一台主机上多个远程debug服务;
2)、基本参数:
Ø -dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
$jmap–dump:live,format=b,file=aaa.bin 3772
Ø -finalizerinfo 打印正等候回收的对象的信息
$jmap -finalizerinfo 3772
|
Attaching to process ID 3772, please wait... Debugger attached successfully. Server compiler detected. JVM version is 20.0-b11 Number of objects pending for finalization: 0 (等候回收的对象为0个) |
Ø -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
$jmap –heap 3772
using parallel threads in the new generation. ##新生代采用的是并行线程处理方式 using thread-local object allocation. Concurrent Mark-Sweep GC ##同步并行垃圾回收 Heap Configuration: ##堆配置情况 MinHeapFreeRatio = ##最小堆使用比例 MaxHeapFreeRatio = ##最大堆可用比例 MaxHeapSize = (.0MB) ##最大堆空间大小 NewSize = (.0MB) ##新生代分配大小 MaxNewSize = (.0MB) ##最大可新生代分配大小 OldSize = (.1875MB) ##老生代大小 NewRatio = ##新生代比例 SurvivorRatio = ##新生代与suvivor的比例 PermSize = (.0MB) ##perm区大小 MaxPermSize = (.0MB) ##最大可分配perm区大小 Heap Usage: ##堆使用情况 New Generation (Eden + Survivor Space): ##新生代(新生代 + survior space) 2 survior space 有一个保持空 capacity = (.4375MB) ##新生代容量 used = (.17323303222656MB) ##已经使用大小 free = (.26426696777344MB) ##剩余容量 32.188004570534986% used ##使用比例 Eden Space: ##伊甸区 capacity = (.875MB) ##伊甸区容量 used = (.99369812011719MB) ##伊甸区使用 free = (.8813018798828MB) ##伊甸区当前剩余容量 34.65220164496263% used ##伊甸区使用情况 From Space: ##survior1区 capacity = (.5625MB) ##survior1区容量 used = (.179534912109375MB) ##surviror1区已使用情况 free = (.382965087890625MB) ##surviror1区剩余容量 12.43827838477995% used ##survior1区使用比例 To Space: ##survior2 区 capacity = (.5625MB) ##survior2区容量 used = (.0MB) ##survior2区已使用情况 free = (.5625MB) ##survior2区剩余容量 0.0% used ## survior2区使用比例 concurrent mark-sweep generation: ##老生代使用情况 capacity = (.0MB) ##老生代容量 used = (.41887664794922MB) ##老生代已使用容量 free = (.5811233520508MB) ##老生代剩余容量 1.6416783843721663% used ##老生代使用比例 Perm Generation: ##perm区使用情况 capacity = (.0MB) ##perm区容量 used = (.111671447753906MB) ##perm区已使用容量 free = (.8883285522461MB) ##perm区剩余容量 35.24349331855774% used ##perm区使用比例
$jmap–histo:live 3772Ø -histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
num #instances #bytes class name ---------------------------------------------- : <constMethodKlass> : <methodKlass> : [B : <constantPoolKlass> : [C : <symbolKlass> : <instanceKlassKlass> : <constantPoolCacheKlass> : java.lang.String : [I : <methodDataKlass> : org.apache.velocity.runtime.parser.Token : java.lang.Class : [Ljava.util.HashMap$Entry; : [S : java.lang.ref.WeakReference : [[I : [Ljava.lang.Object; : java.lang.reflect.Method : java.util.HashMap$Entry : org.apache.velocity.runtime.parser.node.ASTReference : org.apache.velocity.runtime.parser.node.ASTText : <objArrayKlassKlass> : java.lang.ref.SoftReference : java.util.HashMap : org.apache.velocity.runtime.parser.node.ASTIdentifier : org.apache.velocity.util.introspection.Info : java.util.LinkedHashMap$Entry : java.util.concurrent.locks.ReentrantLock$NonfairSync : [Lorg.apache.velocity.runtime.parser.node.Node; : [Ljava.lang.String; : java.beans.MethodDescriptor : java.util.ArrayList Ø -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来. $jmap -permstat
$jmap -permstat 3772Ø -permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
|
class_loader classes bytes parent_loader alive? type <bootstrap> 2172 13144040 null live <internal> 0x00000007882d7ab8 0 0 0x0000000788106c00 dead java/util/ResourceBundle$RBClassLoader@0x00000007f83b0388 0x0000000788c15ca8 1 3136 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788fb1718 1 1968 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x00000007882d0f08 1 2008 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788176c60 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788a7e018 1 3144 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788f515d0 1 1984 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x000000078829a2c8 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788fab478 1 3128 null dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788030fd8 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788d46048 1 3144 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x000000078816f6f0 1 3144 null dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 0x0000000788c18850 1 3112 0x00000007880213d8 dead sun/reflect/DelegatingClassLoader@0x00000007f80686e0 |
Ø -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
Ø -h | -help 打印辅助信息
Ø -J 传递参数给jmap启动的jvm.
参考文献:
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jmap.html
http://blog.csdn.net/fenglibing/article/details/6411953
原文地址:http://blog.csdn.net/zhaozheng7758/article/details/8623530
【JVM命令系列】jmap的更多相关文章
- 【JVM命令系列】jstat
命令基本概述 Jstat是JDK自带的一个轻量级小工具.全称"Java Virtual Machine statistics monitoring tool",它位于java的bi ...
- 【JVM命令系列】jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...
- 【JVM命令系列】javap
命令基本概述 javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作.可以在命令行窗口先用javap -help看下j ...
- JVM基础系列第15讲:JDK性能监控命令
查看虚拟机进程:jps 命令 jps 命令可以列出所有的 Java 进程.如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示. $ jps 6540 ...
- JVM基础系列第13讲:JVM参数之追踪类信息
我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...
- JVM命令-java服务器故障排查
一.top(Linux命令) 执行top命令: (查看进程15477的详细情况,下文用到) 系统信息(前五行): 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相 ...
- JVM基础系列第14讲:JVM参数之GC日志配置
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...
- JVM基础系列第11讲:JVM参数之堆栈空间配置
JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError.因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要. tips ...
- JVM基础系列第10讲:垃圾回收的几种类型
我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...
随机推荐
- Spring Boot之Hello World
Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...
- [js高手之路]设计模式系列课程-设计一个模块化扩展功能(define)和使用(use)库
模块化的诞生标志着javascript开发进入工业时代,近几年随着es6, require js( sea js ), node js崛起,特别是es6和node js自带模块加载功能,给大型程序开发 ...
- Myeclipse去掉恶心的弹框
错误提示: 解决方法: 把JavaScript Validator去掉.去掉的方法是:选择一个项目—-右键Properties—-Builders(排第二)—-点一下右侧会有四项—-取消第一项“Jav ...
- 通过css控制超链接不显示下划线
“页面属性”——“链接”——“下划线样式”——“始终无下划线” <style type="text/css"> a:link { text-decoration: no ...
- openssl命令
author:JevonWei 版权声明:原创作品 1.构建根证书 构建根证书前,需要构建随机数文件(.rand),完整命令如 openssl rand -out private/.rand 1000 ...
- 西门子 PLC SFC14/15 80B1故障
SFC14/15 S7-300/400/1500 PLC中,SFC14/15用于将分站的IO数据批量读取到DB块中.MOVE(L T)指令只能最多传送4byte.因此,使用SFC14/15能够简化程序 ...
- VHDL学习记录
VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language ,是一种标准硬件描述语言.下面通过60进制计数器来分析VH ...
- zabbix 问题汇总
1.Zabbix agent on Zabbix server is unreachable for 5 minutes 查看日志sudo tailf /var/log/zabbix/zabbix_a ...
- web程序员标准环境之DreamWeaver【推荐】
Adobe Dreamweaver,简称"DW",中文名称 "梦想编织者",是美国MACROMEDIA公司开发的集网页制作和管理网站于一身的所见即所得网页编辑器 ...
- CCIE-MPLS VPN-实验手册(中卷)
5:MPLS VPN PE CE OSPF 实验1 5.1 实验拓扑 5.2 实验需求 a. R1 R2 R3 组成P-NETWORK,底层协议采用EIGRP b. R1 R2 R3 直连链路启用LD ...