首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java命令学习系列(三)——Jmap

一般,在内存不足、GC异常等情况下,我们就会怀疑有内存泄露。这个时候我们就可以制作堆Dump来查看具体情况。分析原因。...-histo[:live] 打印堆的柱状图。其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。...如果指定的pid没有响应,请使用jmap -dump或jmap -histo选项。此模式下,不支持live子选项。 -h打印帮助信息。 -help 打印帮助信息。...-histo:live 这个命令执行,JVM会先触发gc,然后再统计信息。...4.使用jmap -histo:[live]查看堆内存中的对象的情况。如果有大量对象在持续被引用,并没有被释放掉,那就产生了内存泄露,就要结合代码,把不用的对象释放掉。

1.4K10
您找到你想要的搜索结果了吗?
是的
没有找到

性能优化-jmap的使用以及内存溢出分析

4、jmap的使用以及内存溢出分析 前面通过jstat可以对jvm堆的内存进行统计分析,而jmap可以获取到更加详细的内容, 如:内存使用情况的汇总、对内存溢出的定位与分析。...#查看所有对象,包括活跃以及非活跃的jmaphisto | more #查看活跃对象 jmaphisto:live | more [root@node01 ~]# jmap...‐histo:live 6219 | more num #instances #bytes class name ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐...dump到文件中 有些时候我们需要将jvm当前内存中的情况dump到文件中,然后对它进行分析,jmap也是支持dump到文件中的。...查看可能存在内存泄露的分析: ?

89410

JVM常用分析工具之jmap

文章目录 一、简介 二、jmap用法 三、使用示例 1、no option 2、heap 3、histo[:live] 4、clstats 5、finalizerinfo 6、dump 一、简介   jmap...heap: 显示Java堆详细信息 histo[:live]: 显示堆中对象的统计信息 clstats:打印类加载器信息 finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行...在这个模式下,live子参数无效. help:打印帮助信息 J:指定传递给运行jmap的JVM的参数 三、使用示例 1、no option 查看进程的内存映像信息,类似 Solaris pmap 命令。...jmap -heap pid 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息。 3、histo[:live] 显示堆中对象的统计信息。...jmap -histo:live pid 其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。

1.7K40

测者的性能测试手册:JVM的监控利器

其实在Java的复杂项目中都会有内存不足问题、内存泄露问题、线程死锁问题、CPU问题。这些问题功能测试或者是小压力的情况下有可能并不明显,很容易被忽视。...jmap是java内存映射工具,jmap用于生成堆转储快照(heapdump文件或者dump文件),打印出制定java进程的内存情况。...内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件....-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量....另外,内部String的数量和占用内存数也会打印出来. -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

45020

一次艰难的内存泄露排查,BeanUtils的锅

,通过jmap -histo/-histo:live pid >> log导出fgc前后的histo对比,发现了一个实例数很大的对象CarnivalOneDayInfo,达到了2kw级别,而且一直在增加...但是线上玩家很多,而且堆内存很多,导出一次很花费时间,会stw,所以直接连开发服务器,查了一下,一样存在CarnivalOneDayInfo泄露的问题,所以直接利用jmap -dump:live,format...复盘和总结 其实非常怀疑过beanutils的问题,但是没有太仔细注意,现在一看,和上面的分析一模一样,分析内存泄露,思路: 对比fgc前后的histo,确认那些对象实例数一直在增加,而且明显偏大 分析代码...,如果直接定位问题,最好 如果不能直接定位,需要确认是谁持有该对象引用,那么需要dump堆内存快照 但是不能在线上dump,需要在开发服务器复现(内存泄露通常比较容易复现),然后在开发服务器dump dump...这样能快速确认是否是出现了内存泄露还是真的比较占内存

1.1K51

Java计算一个对象占用内存的大小

工具     } } /** output: 72 72 voice2:56 */ jmap 查看 一致的:OK   jmap -histo PID | findstr ObjName   打印出某个...可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。...如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。...-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.    ...另外,内部String的数量和占用内存数也会打印出来.    -F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.

1.9K10

Java内存泄露分析

常见的有全局集合类 堆对象统计信息 命令:jmap -histo:live pid 描述:显示堆中对象的统计信息 可以看到各个类的实例数和占用内存大小 num #instances...interface Lclassname; double D float F int I long J short S 如果有[则表示数组,[[则是二维数组 一般情况下从类的实例数,还是很难定位到内存泄露点...,因为没有引用链路,不知道是哪个变量造成了内存泄露 生成内存镜像 命令:jmap -dump:format=b,file=heapdump.hprof [pid] 描述:生成堆转储快照dump文件...dump内存镜像,我们就可以使用内存分析工具(MAT),查看各个类的引用链路,找到内存泄漏点 使用MAT分析 一般使用Dominator Tree,因为一般对象的内存占用大小只是该对象本身的大小...,不包含其引用其他对象的大小,Dominator Tree可以计算对象以及被其引用的其他对象的大小,这样就可以找到最终导致内存泄露的点 从MAT分析结果来看: ch.qos.logback.classic.LoggerContext

1.6K10

jvm 性能调优工具之 jmap

heap: 显示Java堆详细信息 histo[:live]: 显示堆中对象的统计信息 clstats:打印类加载器信息 finalizerinfo: 显示在F-Queue队列等待Finalizer...在这个模式下,live子参数无效....help:打印帮助信息 J:指定传递给运行jmap的JVM的参数 示例一:no option 命令:jmap pid 描述:查看进程的内存映像信息,类似 Solaris pmap 命令。...示例二:heap 命令:jmap -heap pid 描述:显示Java堆详细信息 打印一个堆的摘要信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息 C:\Users\jjs>jmap -...示例三:histo[:live] 命令:jmap -histo:live pid 描述:显示堆中对象的统计信息 其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。

1.4K120

jmap查询JVM堆内存

jmap命令可以获取运行中的jvm的快照,从而离线分析,检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中最多的对象,各种对象所占用的内存大小.可以使用jmap生成Heap Dump....jmap pid 查看进程的内存映像信息,类似 Solaris pmap 命令 使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称...-histo:live pid 堆中对象统计 其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。...如果指定了live子选项,则只计算活动的对象。...[root@Server-i-b2l6uawirw ~]# jmap -histo:live 18378 | more num #instances #bytes class

1.9K00

只需4个步骤,分析解决在生产环境下JVM内存泄露问题

老年代内存占用百分比变化趋势大致如下: 初步判断大量请求超时和服务瘫痪的直接原因: 每次fullGC后的内存占用越来越高 内存占用增长速度越来越快 fullGC的频率越来越高...最终占用达到100%,服务完全瘫痪 分析处理 使用指令:jmap -histo:live *** | more 查看堆内存中的对象数量和大小 发现Log4jLogEvent这个对象实例很多,占用内存也异常的大...后续分析 在前一步分析内存的同时,使用指令:jmap -dump:format=b,file=heapDump.hprof将实时内存信息导出(dump过程比较慢,所以在问题暂时处理完后进行后续分析),使用...mat分析内存结构: 可以看到主要占据堆内存的对象信息,果然是Flume异步传输日志堵塞的问题。...总结 对jvm内存泄露这类问题的解决,主要是要善于利用jvm提供的类似jstat、jmap等工具来分析查找问题。这次问题虽然解决,但是后续还是存在出现此类问题的风险。

1.6K00
领券