GC之七--gc日志分析工具

性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析。

Gc日志参数

通过在tomcat启动脚本中添加相关参数生成gc日志

-verbose.gc开关可显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。

打开-xx:+ printGCdetails开关,可以详细了解GC中的变化。

打开-XX: + PrintGCTimeStamps开关,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。

最后,通过-xx: + PrintHeapAtGC开关了解堆的更详细的信息。

为了了解新域的情况,可以通过-XX:=PrintTenuringDistribution开关了解获得使用期的对象权。

-Xloggc:$CATALINA_BASE/logs/gc.log gc日志产生的路径

XX:+PrintGCApplicationStoppedTime // 输出GC造成应用暂停的时间

-XX:+PrintGCDateStamps // GC发生的时间信息

Gc日志

2016-11-23T11:01:27.738+0800: 0.150: [GC [PSYoungGen: 331K->288K(5952K)] 331K->288K(19648K), 0.0006495 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2016-11-23T11:01:27.739+0800: 0.152: [Full GC (System) [PSYoungGen: 288K->0K(5952K)] [PSOldGen: 0K->164K(13696K)] 288K->164K(19648K) [PSPermGen: 3054K->3054K(21248K)], 0.0059625 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2016-11-23T11:01:27.852+0800: 0.264: [GC [PSYoungGen: 103K->64K(5952K)] 267K->228K(19648K), 0.0066830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2016-11-23T11:01:27.859+0800: 0.271: [Full GC (System) [PSYoungGen: 64K->0K(5952K)] [PSOldGen: 164K->165K(13696K)] 228K->165K(19648K) [PSPermGen: 3060K->3060K(21248K)], 0.0052429 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

日志中显示了gc发生的时间,young区回收情况,整体回收情况,fullGC情况,回收所消耗时间等.

 

常用JVM参数

分析gc日志后,经常需要调整jvm内存相关参数,常用参数如下

-Xms初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制

-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制

-Xmn新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。 
在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-XX:SurvivorRatio新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。

-Xss每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。

-XX:PermSize设置永久代(perm gen)初始值。默认值为物理内存的1/64。

-XX:MaxPermSize设置持久代最大值。物理内存的1/4。

 

Gc日志分析工具

(1)GCHisto

http://java.net/projects/gchisto

优点:可以横向对比,如jvm参数调整前和调整后进行对比等。

直接点击gchisto.jar就可以运行,点add载入gc.log

统计了总共gc次数,youngGC次数,FullGC次数,次数的百分比,GC消耗的时间,百分比,平均消耗时间,消耗时间最小最大值等

示例: jdk1.6,jvm参数为:-Xmx20m -XX:MaxDirectMemorySize=10m -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc1.6.log

2016-11-23T11:01:27.738+0800: 0.150: [GC [PSYoungGen: 331K->288K(5952K)] 331K->288K(19648K), 0.0006495 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
2016-11-23T11:01:27.739+0800: 0.152: [Full GC (System) [PSYoungGen: 288K->0K(5952K)] [PSOldGen: 0K->164K(13696K)] 288K->164K(19648K) [PSPermGen: 3054K->3054K(21248K)], 0.0059625 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2016-11-23T11:01:27.852+0800: 0.264: [GC [PSYoungGen: 103K->64K(5952K)] 267K->228K(19648K), 0.0066830 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
2016-11-23T11:01:27.859+0800: 0.271: [Full GC (System) [PSYoungGen: 64K->0K(5952K)] [PSOldGen: 164K->165K(13696K)] 228K->165K(19648K) [PSPermGen: 3060K->3060K(21248K)], 0.0052429 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

GCHisto展示:

统计的图形化表示

YoungGC,FullGC不同消耗时间上次数的分布图,勾选可以显示youngGC或fullGC单独的分布情况

整个时间过程详细的gc情况,可以对整个过程进行剖析

 

   

(2)GCLogViewer

只支持jdk1.6(32位),jdk7,jdk8不支持。

http://code.google.com/p/gclogviewer/

点击run.bat运行

整个过程gc情况的趋势图,还显示了gc类型,吞吐量,平均gc频率,内存变化趋势等

Tools里还能比较不同gc日志

gc日志分析工具 - 网易杭州QA - 网易杭州 QA Team

(3)HPjmeter

获取地址 http://www.hp.com/go/java
参考文档 http://www.javaperformancetuning.com/tools/hpjtune/index.shtml

工具很强大,但只能打开由以下参数生成的GC log, -verbose:gc -Xloggc:gc.log,添加其他参数生成的gc.log无法打开。

 

(4)GCViewer

http://www.tagtraum.com/gcviewer.html

这个工具用的挺多的,但只能在JDK1.5以下的版本中运行,1.6以后没有对应。

(5)garbagecat

http://code.google.com/a/eclipselabs.org/p/garbagecat/wiki/Documentation

 

其它监控方法

Jvisualvm动态分析jvm内存情况和gc情况,插件:visualGC

 

gc日志分析工具 - 网易杭州QA - 网易杭州 QA Team

 gc日志分析工具 - 网易杭州QA - 网易杭州 QA Team 

jvisualvm还可以heapdump出对应hprof文件(默认存放路径:监控的服务器 /tmp下),利用相关工具,比如HPjmeter可以对其进行分析

grep Full gc.log粗略观察FullGC发生频率

jstat –gcutil [pid] [intervel] [count]

jmap -histo pid可以观测对象的个数和占用空间
jmap -heap pid可以观测jvm配置参数,堆内存各区使用情况

jprofiler,jmap dump出来用MAT分析

 

如果要分析的dump文件很大的话,就需要很多内存,很容易crash。

所以在启动时,我们应该加上一些参数: Java –Xms512M –Xmx1024M –Xss8M 

  

参考资料:

(一)探秘Java虚拟机——内存管理与垃圾回收http://sunbean.blog.51cto.com/972509/768034

转载于:https://www.cnblogs.com/duanxz/p/6092911.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql修炼之道_PostgreSQL的TOAST技术

本文参考&#xff1a;PostgreSQL TOAST 技术理解《PostgreSQL修炼之道》一、TOAST是什么&#xff1f;TOAST是“The Oversized-Attribute Storage Technique”&#xff08;超尺寸属性存储技术&#xff09;的缩写&#xff0c;主要用于存储一个大字段的值。要理解TOAST&#xff0c…

3D器官和骨骼将使移植清单成为历史

来源&#xff1a;IEEE电气电子工程师学会对于患有慢性病或病情危重的患者&#xff0c;等待器官移植匹配的时间可能对生命生死攸关。根据美国卫生资源和服务管理局&#xff08;Health Resources and Services Administration&#xff1a;https://www.organdonor.gov/statistics-…

11月25号站立会议

小组名称&#xff1a;飞天小女警 项目名称&#xff1a;礼物挑选小工具 小组成员&#xff1a;沈柏杉&#xff08;组长&#xff09;、程媛媛、杨钰宁、谭力铭 代码地址&#xff1a;HTTPS: https://git.coding.net/shenbaishan/GIFT.git SSH&#xff1a;gitgit.coding.net:shenbai…

鱼c论坛python课后作业_三日速成python?打工人,小心钱包,别当韭菜

随着人工智能的热度越来越高&#xff0c;许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python&#xff0c;作为一种相对比较容易上手的语言&#xff0c;也越来越受欢迎。网络上各类网课层出不穷&#xff0c;各式广告令人眼花缭乱。某些课程甚至卖出“天价”&a…

Linux shell的输入输出

echo --echo命令可以显示文本行或变量&#xff0c;或者把字符串输入到文件 --echo [option] string-e 解析转义字符 例如&#xff1a;echo -e "nimenhao\nasfdsaf" 打印发生换行-n 回车不换行 详解&#xff1a;一般在命令行打印字符串&#xff0c;光标会…

区块链共识算法的发展现状与展望

来源&#xff1a;平行区块链摘 要 共识算法是区块链技术的核心要素, 也是近年来分布式系统研究的热点. 本文系统性地梳理和讨论了区块链发展过程中的 32 种重要共识算法, 介绍了传统分布式一致性算法以及分布式共识领域的里程碑式的重要研究和结论, 提出了区块链共识算法的一种…

iphone打字怎么换行_iPhone电池保养指南

虽然手机电池的使用寿命会随着用户的日常使用慢慢减少、但需要注意的是、一些不恰当的操作方法&#xff0c;会导致电池寿命快速下降。这时候会有人说&#xff0c;那我可以换电池呀虽然换电池之后&#xff0c;一开始确实还可以&#xff0c;但是随着不恰当的使用&#xff0c;又开…

vc2017 linux printf,C/C++中自定义信息输出——printf与宏的配合使用

在C/C中&#xff0c;提起“宏”多少有些皱眉&#xff0c;至少我在入门C时旁人好心提醒&#xff1a;尽可能地使用typedef与const常量定义来替代“宏”的使用&#xff1a;1. 类型宏定义#define HANLE void*//可以替换为&#xff1a;typedef void *HANLE;2. 常量定义#define MAX_L…

这是我看过,最好懂的神经网络

来源&#xff1a;图灵教育猜一猜&#xff0c;下图中是什么动物&#xff1f;图1 看图猜动物尽管图中的动物胖得出奇&#xff0c;你也应该能够猜到它是一只长颈鹿。人类的大脑拥有强大的辨识能力&#xff0c;它是一个由差不多 800 亿个神经元组成的复杂网络。即使某物并非我们熟知…

上位机软件用什么写的_python7天训练营 | 为什么大家都开始用python写论文了?...

谈及保研&#xff0c;“内卷”被大家吵得沸沸扬扬。但其实&#xff0c;不仅是夏令营申请竞争、推免资格评比等环节&#xff0c;就连最基本的论文&#xff0c;也开始卷了起来。就以大家最常写的实证类论文为例&#xff1a;前两年&#xff0c;很多社科和经管的学科&#xff0c;夏…

美国如何发展脑科技

来源&#xff1a;蓝海长青智库作者&#xff1a;王小理、韩雪、薛淮大脑是理解自然和人类本身的“终极疆域”&#xff0c;脑科技是科研领域“皇冠上的明珠”。相比欧洲“人类脑计划”的迟缓&#xff0c;美国“推进创新神经技术脑研究计划”&#xff08;BRAIN&#xff09;进展颇为…

关于mysql ERROR 1045 (28000)错误的解决办法

错误情景: 使用Navicat打开mysql的时候弹出错误框 错误代码: ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: YES) 解决步骤: 1.找到配置文件my.ini &#xff0…

欧洲将研究具备自学习能力的无人机“蜂群”

来源&#xff1a;空天防务观察2019年10月23日&#xff0c;美国《防务新闻》网站报道称&#xff1a;芬兰将发展人工智能列为其领导欧洲联盟理事会六个月任期的关键目标&#xff0c;并提出了“压制防空无人机蜂群”&#xff08;SEAD Swarm&#xff09;项目&#xff0c;以迷惑、瘫…

表格打印没有左边线_office办公软件Excel表格的打印技巧,建议收藏

很多新手使用办公软件过程中&#xff0c;对于Excel的打印出现了诸多问题&#xff0c;今天我们就一起来看看表格打印的几个技巧&#xff01;打印预览时网格线怎么不见了&#xff1f;如何调整打印区域的页边距&#xff1f;如何设置单色打印&#xff1f;......这些打印时遇到的麻烦…

符号说明表怎么做_能看懂这些房屋施工图,说明你家装修没问题了

一、基本知识1、标高1.1绝对标高亦称绝对高程或海拔高度,我国把青岛附近黄海的平均海平面定为绝对标高的零点,全国各地的标高均以此为基准。1.2标高是把某地点对应的绝对标高定义为0.000&#xff0c;(如名辉12#楼27.5)也称相对标高。建筑中一般以一层室内地面对应的绝对标高为0…

【ARM-Linux开发】U-Boot启动过程--详细版的完全分析

------------------------------------------------------------------------------------------------------------------------------------------- 我们知道&#xff0c;bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 在…

一文看懂RISC-V:异构IoT时代全新架构

来源&#xff1a; 芯潮近两年来&#xff0c;在ARM和Intel主导的竞争格局中&#xff0c;新的开源指令集架构RISC-V在芯片江湖声名鹊起。我们将指令集分为三种&#xff1a;1、复杂指令集&#xff08;CISC&#xff09;&#xff1a;x86&#xff1b;2、精简指令集&#xff08;RISC&a…

谷粒商城三阶段课件_苏科版初中物理九年级上册二、变阻器公开课优质课课件教案视频...

课题&#xff1a; 14.2变阻器教学目标&#xff1a;1&#xff0e;知道滑动变阻器的构造及工作原理。2&#xff0e;能画出滑动变阻器的结构示意图和符号。3&#xff0e;会正确连接和使用滑动变阻器。4&#xff0e;了解生活中变阻器的一些应用。教学重点、难点&#xff1a;重点&a…

小牛地图矢量抓取工具_SEO优化网站sitemap需要注意哪些要点才能很好的被百度蜘蛛抓取...

SEO优化网站sitemap需要注意哪些要点才能很好的被百度蜘蛛抓取一、全部链接真实有效。地图的主要目的是方便搜索引擎蜘蛛抓取的&#xff0c;如果地图存在死链&#xff0c;会影响网站在搜索引擎中网站权重的&#xff0c;要仔细检查有无错误的链接地址&#xff0c;提交前通过站长…

【加州理工】什么是模仿学习(Imitation Learning(模仿学习), 这62页ppt带你了解进展...

来源&#xff1a;专知【导读】Imitation Learning&#xff08;模仿学习&#xff09;机器学习新的研究热点之一&#xff0c;因其能很好的解决强化学习中的多步决策&#xff08;sequential decision&#xff09;问题&#xff0c;近段时间得到了广泛关注。那么模仿学习近期的前沿进…