摘要:如果你下的没有,可以自己添加一个相关资料几个关键淘测试使用进行堆转储文件分析
当JVM响应变慢或者停滞的时候,我们往往需要对GC和其内存情况是进行分析,下面列举一些常用的分析方法和工具:
获得GC信息的方法 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps详细解释可以看JAVA SE 6 GC调优笔记
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStopped-XX:+ PrintGCApplicationConcurrentTime,打印在collection之间,程序运行的时间
-XX:+ PrintGCApplicationStopped,打印的是collection pause的时间
下面是这两个参数的输出样例:
Application time: 1.3874623 seconds [GC [DefNew: 8064K->63K(8128K), 0.0509215 secs] 11106K->5994K(32704K), 0.0510972 secs] Total time for which application threads were stopped: 0.0517092 seconds Application time: 1.5225065 seconds [GC [DefNew: 8127K->63K(8128K), 0.0432982 secs] 14058K->8273K(32704K), 0.0434172 secs] Total time for which application threads were stopped: 0.0440447 seconds Application time: 1.4263524 seconds [GC [DefNew: 8127K->64K(8128K), 0.0363538 secs] 16337K->10381K(32704K), 0.0364811 secs] Total time for which application threads were stopped: 0.0369103 seconds
从上面可以看出程序在minor collection之间跑了1.38到1.52秒,minor collection pause在.036到.051。所以minor collection的开销大致在2.6%到3.6%.
jstatjstat的-option参数有很多种,输出的内容各不相同,详情参考官方文档
dump内存的方法 被动dump-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof
在OutOfMemory时,输出一个dump文件,记录当时的内存快照,并把文件输出到/tmp/dump.hprof文件
主动dump利用jmap把内存dump下来,比如jmap -dump:live,format=b,file=dump.hprof
内存dump分析工具 jhatJava内置工具(教程),dump文件少于1G的时候可以用这个,它会起一个web服务,用于查看dump信息。
需要有一台内存大于dump文件大小2倍的机器
HeapAnalyzer直接分析dump并展示的客户端(下载)
需要有一台内存大于dump文件大小2倍的机器,还需要能显示出来的(桌面操作系)
mat展示dump的客户端(神器)(下载)(教程)
mat分为展示和分析模块,可以用一个ParseHeapDump.sh先对dump文件分析并产生一堆索引文件(用服务器搞),然后再用mat的桌面应用打开这些文件,4G内存的机器分析8G的dump完全没压力。
如果你下的mat没有ParseHeapDump.sh,可以自己添加一个:
#!/bin/sh # # This script parses a heap dump. # Adjust the path to java, version 5 or later, and the heap size as required. # Suitable for 64-bit and 32-bit Java, but a 64-bit Java is required # for larger heap sizes. # # Usage: ParseHeapDump.sh相关资料[report]* # # The leak report has the id org.eclipse.mat.api:suspects # The top component report has the id org.eclipse.mat.api:top_components # java -Xmx8192M -jar "`dirname "$0"`"/plugins/org.eclipse.equinox.launcher_1*.jar -consoleLog -application org.eclipse.mat.api.parse "$@"
Spark on Yarn:几个关键Pull Request
淘测试
使用 Eclipse Memory Analyzer 进行堆转储文件分析
Memory Analyzer Help Documentation
Diagnosing a Garbage Collection problem
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65032.html
摘要:内存模型和运行时数据区域的关系主内存对应着堆,工作内存对应着栈。在的单例模式中有运用到二运行时数据区域内存区域因为的运行时数据区域一直在改善,所以不同版本之间会有不同。 一、java内存模型 showImg(https://segmentfault.com/img/remote/1460000016694250?w=1810&h=941); java定义内存模型的目的是:为了屏蔽各种...
摘要:内存溢出分配的内存空间超过系统内存。内存泄漏的原因分析由大块组成堆,栈,本地方法栈,程序计数器,方法区。内存溢出的原因分析内存溢出是由于没被引用的对象垃圾过多造成没有及时回收,造成的内存溢出。小结栈内存溢出程序所要求的栈深度过大导致。 showImg(https://segmentfault.com/img/bVbweuq?w=563&h=300); 前言:JVM中除了程序计数器,其他...
摘要:原文链接这是专家系列文章的第二篇。运行在本地虚拟机上的应用的又称为,通常与相同。性能数据需要持续观察,因此在运行时需要定时输出的监控信息。新生代容量的统计信息。是提供的一个式的图表监控工具。 原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是GC专家系列文章的第二...
摘要:堆内存使用分析,垃圾收集器日志解读重要的东东在中,对象实例都是在堆上创建。机制是由提供,用来清理需要清除的对象,回收堆内存。在中,是由一个被称为垃圾回收器的守护线程执行的。 堆内存使用分析,垃圾收集器 GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建。一些类信息,常量,静态变量等存储在方法区。堆和方法区都是线程共享的。 GC机制是由JVM提供,用来清理需要清除的对象,...
阅读 1963·2021-11-19 09:40
阅读 1902·2021-09-28 09:36
阅读 2191·2021-09-22 10:02
阅读 2681·2019-08-30 14:00
阅读 1910·2019-08-29 15:31
阅读 2855·2019-08-29 15:11
阅读 2860·2019-08-29 13:04
阅读 1050·2019-08-27 10:55