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,一经查实,立即删除!

相关文章

python爬虫网络库下载_Python3 DHT 网络磁力种子爬虫

Python3 DHT 网络磁力种子采集器&#x1f60e; 严肃的理论磁力链接现在我们使用迅雷等工具下载资源的时候&#xff0c;基本上都只需要一个叫做磁力链接的东西就可以了&#xff0c;非常方便。磁力定义磁力链接是对等网络中进行信息检索和下载文档的电脑程序。和基于“位置”连接…

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…

linux 键盘过滤,linux – 需要拦截HID Keyboard事件(然后阻止它们)

我有一个RFID USB设备,注册为HID设备(A USB键盘或多或少).我正在寻找一种方法来捕获此输入,并在它碰到普通键盘事件处理程序(并将10位数的RFID代码输出到控制台)之前对其进行阻塞/过滤.我当然必须专门捕获这个设备,并且将真正的键盘输入单独留下(或传递给它).我最初的想法是在U…

鱼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 种重要共识算法, 介绍了传统分布式一致性算法以及分布式共识领域的里程碑式的重要研究和结论, 提出了区块链共识算法的一种…

python预测发展趋势_Python中的趋势“预测器”?

对于预测时间序列数据&#xff0c;我觉得最好的选择是LSTM&#xff0c;它是一种递归神经网络&#xff0c;非常适合于时间序列回归。在如果您不想深入研究神经网络的后端&#xff0c;我建议您使用Keras库&#xff0c;它是Tensorflow框架的包装器。在假设你有一个一维数组&#x…

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…

SVN需要忽略的文件类型

自己在用的&#xff0c;有问题的话欢迎指正&#xff0c;直接复制粘贴即可。&#xff08;一般人我都不告诉他&#xff09; *.lo,*.la,*.al,*.so,*.so.[0-9]*,*.pyc,*.pyo,*.rej,.*.swp,.DS_Store,*.xcscmblueprint,xcuserdata,*.xcuserdatad,*.xcuserstate,*.xcuserdata,xcschem…

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

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

python atm作业详解_Python学习day5作业-ATM和购物商城

Python学习day5作业Python学习day5作业ATM和购物商城作业需求ATM&#xff1a;指定最大透支额度可取款定期还款(每月指定日期还款&#xff0c;如15号)可存款定期出账单支持多用户登陆&#xff0c;用户间转帐支持多用户管理员可添加账户、指定用户额度、冻结用户等购物车&#xf…

linux咋socket编程,linux中socket编程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼客户端&#xff1a;include #include #include #include #include #include #include #include #include #define SERVPORT 1234#define MAXDATASIZE 1000 /**/ int main(int argc, char *argv[]){int sockfd, recvbytes;int clien…

redis 简单应用

Incr $views Redis::incr(views); $article_views Redis::incr(article: . $article_id . :views); zIncrBy 有序集合 Sorted sets public function set($id){Redis::zIncrBy(articleViews, 1, article:.$id);}public function get(){$hots Redis::zRevRange(articleViews…

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

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

美国如何发展脑科技

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

python 类初始化参数校验_如何规避python参数的初始化次数?

我们在内存不足的时候&#xff0c;除了增加内存的可用度&#xff0c;可以进行一个清理内存的初始化操作&#xff0c;当然这种是最后迫不得已的选择。我们在python中也有需要用到初始化的地方&#xff0c;鉴于参数和函数的关系密不可分&#xff0c;本篇我们会简单的说一下参数的…

spring版本 jdk8_从JDK8升级到JDK11,看这篇就足够了

原文地址&#xff1a;https://blog.codefx.org/java/java-11-migration-guide/。 在原文的基础上&#xff0c;增加了一些我遇到的具体的坑还有在特定场景下的解决方案&#xff0c;供大家参考一些背景在背景知识&#xff0c;我们会讨论一些关于新的JDK Release周期&#xff0c;O…