jmap dump内存的命令是

jmap dump内存的命令是:生成堆转储快照。

jmap常见的命令格式:jmap [option] LVMID,其中[option]则可以通过不同的代码代替,从而形成新的电脑程序代码。

jmap命令详解_jmap使用详解jmap命令详解_jmap使用详解


jmap命令详解_jmap使用详解


jmap命令详解_jmap使用详解


attach方式,简单来说就是客户端和服务端之间的通信,客户端发送请求,主要逻辑在服务端执行,jmap相当于客户端,JVM相当于服务端。

finalizer-显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。

heap-显示Ja堆详细信息。

histo-显示堆中对象的统计信息。

permstat-to print permanent generation statistics。

jmap dump内存的命令是什么呢?

jmap常见的命令格式:jmap [option] LVMID,其中[option]则可以通过不同的代码代替,从而形成新的电脑程序代码。

finalizer-显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。

heap-显示Jajvisualvm可以本地、远程的ja进程,实时查看进程的cpu、堆、线程等参数,对ja进程生成dump文件,并对dump文件进行分析。堆详细信息。

histo-显示堆1、在Jmap.ja类的main函数中,对参数进行解析。中对象的统计信息。

permstat-to print permanent generation statistics。

使用jstat命令会影响ja进程吗

图 1. 安装插件第步

使用jstat命令会影响ja进程

JDK自带VM分析工具jps,jstat,jmap,jconsole

一、概述

SUN 的JDK中的几个工具,非常好用。秉承着有免费,不用商用的原则。以下简单介绍一下这几种工具。(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里,同jac一样,不须特意安装) 。

我一共找到以下四个工具:重点看看jconsole和jmap。

jps

:与unix上的ps类似,用来显示本地的ja进程,可以查看本地运行着几个ja程序,并显示他们的进程号。

jstat

:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

jmap

:打印出某个ja进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量)。

jconsole

:一个ja GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的VM。

二、 使用介绍:

1、jps :我想很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程,及其 id。 jps 也是一样,它的作用是显示当前系统的ja进程情况,及其id号。我们可以通过它来查看我们到底启动了几个ja进程(因为每一个ja程序都会独占一个ja虚拟机实例),和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。

使用方法:在当前命令行下打 jps(需要JAVA_HOME,没有的话,到改程序的目录下打) 。

可惜没有linux下的ps好用,名称不好用。但是在第四个工具jconsole的界面里面会有具体JAR包的名称。

2、jstat :对VM内存使用量进行。

jstat工具特别强大,有众多的可选项,详细查看堆F-当-dump没有响应时,强制生成dump快照。内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。

jstat -class pid:显示加载class的数量,及所占空间等信息。

jstat -compiler pid:显示VM实时编译的数量等信息。

jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是小perm的内存使用量,PGCMX显示的是perm的内存使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。

jstat -gcnew pid:new对象的信息。

jstat -gcnewcapacity pid:new对象的信息及其占用量。

jstat -gcold pid:old对象的信息。

jstat -gcoldcapacity pid:old对象的信息及其占用量。

jstat -gcpermcapacity pid: perm对象的信息及其占用量。

jstat -util pid:统计gc信息统计。

除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 6是每毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。

3、jmap 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用 SHELL jmap -histo pid>a.log可以将其保存到文本中去(windows下也可以使用),在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。 jmap -dump:format=b,file=f1 3024可以将3024进程的内存heap输出出来到f1文件里。

4、jconsole 是一个用ja写的GUI程序,用来VM,并可远程的VM,非常易用,而且功能非常强。由于是GUI程序,这里就不详细介绍了,不会的地方可以参考SUN的文档。

使用方法:命令行里打 jconsole,选则进程就可以了。

友好提示:windows查看进程号,由于任务管理器默认的情况下是不显示进程id号的,所以可以通过如下方法加上。ctrl+alt+del打开任务管理器,选择‘进程’选项卡,点‘查看’->''选择列''->加上''PID'',就可以了。当然还有其他很好的选项。

jmap dump内存的命令是什么?

jmap常见的命令格式:jmap [option] LVMID,其中[option]则可以通过不同的代码代替,从而形成新的电脑程序代码。

finalizer-显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。

heap-显示Ja堆详细信判断I/O瓶颈息。

histo-显示堆中对象的统计信关键字: jdk自带vm分析工具jps,jstat,jmap,jconsole息。

permstat-to print permanent generation statistics。

jmap命令的实现原理解析

当服务发生GC问题时,一般会使用jmap工具进行分析,jmap工具很强大,所以有必要了解它的方方面面。

通过histo选项,打印当前ja堆中各个对象的数量、大小。

如果添加了live,只会打印活跃的对象。

如果添加了live,只会dump活跃的对象。

通过-heap选项,打印ja堆的配置情况和使用情况,还有使用的GC算法。

通过-permstat选项,打印ja堆代的信息,包括class loader相关的信息,和interned Strings的信息。

通过jmap和jvm之间进行通信,有两种实现方式:attach 和 SA。

在JVM中,有一个叫"Attach Listener"的线程,专门负责attach的请求,并执行对应的作。

比如现在执行"jmap -histo:live 5409",一步一步的实现如下:

2、解析出来参数中有“-histo:live”,则执行histo方法:

attach方法建立了jmap进程和JVM之间的socket连接,建立过程可以查看笨神的文章 JVM Attach机制实现 ,后续基于该连接进行通信。

因为命令行中添加了[:live]选项,这里的live参数是true。

再看看heapHisto方法

executeCommand方法基于之前的socket连接向JVM发送了一条"inspectheap"命令,当然了,还有参数。

虚拟机的"Attach Listener"线程当发现有新的命令时,就拿出来处理它。

命令和具体的函数对应关系如下:

和"inspectheap"对应的是heap_inspection方法,实现如下:

live_objects_only的值取决于请求中是否有"-live",再jmap中,取决于是否有":live",所以不管是不是添加了":live",都会有STW过程,时间长短而已。

在VM_GC_HeapInspection的doit方法中

"jmap -dump"实现的原理和"jmap -histo"类似,都是通过attach的方式实现,

attach API的实现方式是:

1、客户端连接到目标JVM,向其发出一个类似“inspectheap”命令;

2、目标JVM接收到命令,执行JVM内相关函数,将收集到的结果以文本形式返回;

如执行"jmap通过-finalizer选项,打印那些正在等待执行finalize方法的对象。 -heap 5409",就不会使用attach方式实现了。

在参数解析中,如果参数是"-heap|-heap:format=b|-permstat|-finalizer"中的一种,或者添加了"-F",比如"jmap -histo -F 5409",则使用SA的方式。

SA方式,和attach方式不同的是,相关的主要逻辑都在SA中实现,从JVM中获取数据即可。

可以大概看下"jmap -heap"的实现,对应的实现类是"HeapSummary",内部通过BugSpotAgent工具类attach到目标VM,更具体的底层细节,可以参考 HotSpot Servability Agent 实现浅析

执行jmap -heap有些时候可能会导致进程变T,一般是有一个线程在等信号量,这时会block住其它所有线程,可以执行kill -CONT

进行恢复,不过还是强烈建option参数参考议别执行这个命令。

Linux系统要用到哪些命令

记录一下自己常用的linux系统命令,方便以后命令:mpstat -P ALL 1 1000查阅,发觉记忆越来越不行了

找到耗CPU的ja线程ps命令

命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

结果展示:

这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息。 比如你想分析一下一个ja进程的一些运行瓶颈点,可以通过该命令找到所有当前Thread的占用CPU的时间,也就是这里的一列。

比如这里找到了一个TID : 30834 ,所占用的TIME时间。

通过 printf "%xn" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应耗CPU的代码快在哪。

"DboServProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]

nid : 对应的linux作系统下的tid,就是前面转化的16进制数字

tid: 这个应该是jvm的jmm内存规范中的地址,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下

top命令

命令:top -Hp pid

结果显示:

和前面的效果一下,你可以实时的跟踪并获取指定进程中耗cpu的线程。 再用前面的方法提取到对应的线程堆栈信息。

mpstat命令

结果显示:

注意一下这里面的%iowait列,CPU等待I/O作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

通过这个参数可以比较直观的看出当前的I/O作是否存在瓶颈

iostat命令

同样你可以观察对应的CPU中的%i命令: iostat -m -x 1 1000owait数据,除此之外iostat还提供了一些更详细的I/O状态数据,比如比较重要的有:

gqu-sz : The erage queue length of the requests that were issued to the dev. (磁盘队列的请求长度,正常的话2,3比较好。可以和cpu的load一样的理解)

await : The erage time (in milliseconds) for I/O requests issued to the dev to be served. (代表一个I/O作从wait到完成的总时间)

svctm和%util都是代表处理该I/O请求花费的时间和CPU的时间比例。 判断是否瓶颈时,这两个参数不是主要的

r/s w/s 和 rMB/s wMB/s 都是代表当前系统处理的I/O的一些状态,前者是我们常说的tps,后者就是吞吐量。这也是评价一个系统的性能指标

pid命令

命令: pidstat -p pid -u -d -t -w -h 1 1000

结果显示:

相当实用的一个命令,可以基于当个进程分析对应的性能数据,包括CPU,I/O,IR , CS等,可以方便开发者更加精细化的观察系统的运行状态。不过pidstat貌似是在2.6内核的一些较新的版本才有,需要安装sysstat包。

ubuntu下,可以通过sudo apt-get install sysstat进行安装。

sar命令

命令:sar -x pid 1 1000

sar也可以指定对应的pid,关注固定的几个参数,没有pidstat那么强大。 看不到对应的I/O, IR等信息。

sar的功能可以覆盖mpstat , iostat的相关功能。

dstat命令

命令:dstat -y --tcp 1 1000

通过dstat --tcp可以比较方便的看到当前的tcp的各种状态,不需要每次netstat -nat去看

其他命令

netstat -natp : 查看对应的网络链接,关注下Recv-Q , Send-Q , State。

lsof -p pid : 查找对应pid的文件句柄

lsof -i : 80 : 查找对应端口被哪个进程占用

lsof /tmp/1.txt :查找对应文件被哪个进程占用

tcpdump / wireshark :抓包分析工具

jstat / jmap / jstack / jps 等一系列的ja命令

如果你想做一些性能调优的工作,一定要善于利用一些工具进行关注相应的状态。通过linux命令你可以比较方便的观测到CPU , I/O , network等一些比较外围的状态, 很多时候就已经可以解决大部分的问题。jvm内部的一些运行状态,得需要借助一些特有的工具进行细粒度的观测。

jmap dump内存的命令是什么?

3、客户端接收到返回的文本并将其显示出来;

jmap常见的命令格式:jmap [option] LVMID,其中[option]则可以通过不同的代码代替,从而形成新的电脑程序代码。

option参数参考

finalizer-显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。

heap-显示Ja堆详细信息。

histo-显示堆中对象的统计信息。

permstat-to print permanent generation statistics。

求助,MemoryAnalyzer用不了,求解决

JMap -dump:format=b,file=

我使用 Eclipse Memory Analyzer V0.8Sun JDK 6

安装 MAT

其插件安装非类似MAT 支持两种安装式种单机版说用户必安装 Eclipse IDE 环境MAT 作 Eclipse RCP 应用运行;另种集版说 MAT 作 Eclipse IDE 部现发平台集

集版安装需要借助 Update Mar

选择Available Software按图 2 所示式添加 MAT 更新址

图 2. 安装插件第二步

图 2. 安装插件第二步

图 3 所示接选择想要安装 MAT 功能点需要注意 Memory Analyzer (Chart) 功能选安装项目主要用相关报表需要用功能需要额外安装 BIRT Chart Engine

图 3. 安装插件第三步

图 3. 安装插件第三步

插件安装完毕需要重新启 Eclipse 工作平台

比较言单机版安装式非简单用户需要载相应安装包解压缩即运行普遍采用种安装式面例我使用单机版 MAT具体载要求址参见其产品载页面:

另外需要用 MAT 析 IBM JVM dump 文件需要额外安装 IBM Diagnostic Tool Framework 具体载安装配置步骤请参见:

配置环境参数

安装完更效率使用 MAT我需要做些配置工作通言析堆转储文件需要消耗堆空间保证析效率性能条件情况我建议配给 MAT 尽能内存资源采用两种式配内存更内存资源给 MAT

种修改启参数 MemoryAnalyzer.exe -vmargs -Xmx4g

另种编辑文件 MemoryAnalyzer.ini面添加类似信息 -vmargs – Xmx4g

至MAT 已经功安装配置始进入实战吧

获堆转储文件

_full_gc的值就是live_objects_only,如果为true,可能会执行一次full gc,清空非活跃的对象,但是可能会因为GC locker,导致跳过本次的GC。巧妇难米炊我首先需要获堆转储文件便本文采用 Sun JDK 6通说要设置所示 JVM 参数:

-XX:+HeapDumpOnOutOfMemoryError

JVM 发内存泄露抓拍内存状态我想要堆转储文件

想等发崩溃性错误才获堆转储文件通设置 JVM 参数按需获取堆转储文件

-XX:+HeapDumpOnCtrlBreak

除外工具例 JMapJConsole 都帮助我堆转储文件本文实例使用 JMap 直接获取 Eclipse Galileo 进程堆转储文件您使用命令:

您需要解同厂家 JVM 所堆转储文件数据存储格式及数据存储内容区别 MAT 工具并能处理所类型堆存储文件比较主流厂家格式例 Sun, HP, SAP 所采用 HPROF 二进制堆存储文件及 IBM PHD 堆存储文件等都能解析(您需要安装额外插件请参考 相关说明本文作详细解释)

万事俱备接我始体验键式堆存储析功能

jmapdump内存的命令是

dump-生成堆转储快照。

jmapdump内存的命令是:生成堆转储快图 1 所示首先通 Help -> Software Updates... 启软件更新管理向导照。

jmap常见的命令格式:jmap[option]LVMID,其中[option]则可以通过不同的代码代替,从而形成新的电脑程序代码。

finalizer-显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象。

heap-显示Ja堆详细信息。

histo-显示堆中对象的统计信息。

permstat-toprintpermanentgenerationstatistics。

内存dump文件导出与查看

生成dump文件的命令:

jmap -dump:format=b,file=20170307.dump 16048通过-dump选项,把ja堆中的对象dump到本地文件,然后使用MAT进行分析。

file后面的是自定义的文件名,的数字是进程的pid

使用jvisualvm来分析dump文件:

jvisualvm是JDK自带的Ja性能分析工具,在JDK的bin目录下,文件名就叫jvisualvm.exe。

像我这种从上dump下来文件也可以直接扔给jvisualvm来分析。

使用方式:直接双击打开jvisualvm.exe,点击文件->装入,在文件类型那一栏选择堆,jstat -printcompilation pid:当前VM执行的信息。选择要分析的dump文件,打开。