gc调优我们到底在调整什么
java开发一般都会涉及到jvm调优其中gc调优是个重点项。那gc调优调整的究竟是什么呢准确来说是业务。下面围绕这个话题展开
起因
为什么说是业务呢得从cc++开始说起如果说是用c/c++做开发运行的效果是比较稳定的。毕竟没有gc这种问题也就没有什么gc造成的停顿没有响应。但是c/c++开发要比java慢尤其是跨平台运行的程序需要不停的做宏定义区分系统的区别。包括开源的库还有框架整体是比java少的。java的框架特别多可以说如果面对的是比较成型的业务那么基本就是java框架的应用并不会自己重头来做。所以java开发效率上带来了极大的便利。
java的缺点也就是他的垃圾回收。java没有delete这样释放内存的操作这个本来算是个有点不需要过多的操心内存泄漏问题。他的结局方案是垃圾回收器。会导致带来的短暂停顿然后jvm去做对象回收。
业务
虽然有以上的问题但是业务场景确实是多样的根据业务场景调优这个才是我们要做的。业务场景大概能分为以下几种
任务型
交互型
任务型
任务型主要是执行一段代码一旦执行不需要过多的交互。例如计算一个月的数据等等大多数的表现都是计算出结果就完毕一般就是希望全力跑出结果对应到java里的部分就是在乎吞吐量。吞吐量就是业务执行时间/gc时间+业务执行时间。
任务型的情况parallel gc基本就是唯一选择我们只需要注意-XX:GCTimeRatio这个参数即可公式为1/1+N默认为99表示吞吐量gc只占用1%的时间剩下99%都是业务执行。
交互型
交互型的一般表现为我们的网站这种需要人参与的。这种情况下响应速度就比较重要了gc了5秒那么jvm停顿5秒这个显然是不能接受的。
一般首选cms。cms的优点是老年带回收时分多个步骤只有初始标记和再次标记是stw的。其余的步骤并不会导致jvm业务停顿由于gc线程和业务线程并行在跑响应也不会和没有gc时的一样好。
cms的问题在于浮动垃圾最终会采取单线程回收老年代的情况会有次回收导致时间特别长。
G1相对缓解了cms浮动垃圾的问题他通过region管理堆对象的分配可以规整管理。G1也有fullgc的问题。也需要合理的避免。
特例
上面说明了大多数场景的选择但是具体还需要根据自己的场景来测试例如虽然是个交互型但是用的堆少物理机的机器资源很多那么这种场景下parallel gc不一定比cms表现差虽然他gc的时候整体停顿了但是堆小gc线程多。压测起来qps比cms更好。
观察方式
gc的初步选择已经出来了接下来需要调整具体的搭配的gc参数了。这时候就需要一个观察者来看调整的参数知否有效。选择的方式有很多比较建议prometheus的方案主要是他是开源且简单搭建的可以通过grafana把参考的指标都打出来。我们就可以通过查看曲线图等等对参数调整的状态有一个比较直观的认知这里不用通过日志来看图像更直观一点日志中的细节很多但是随着时间线的对比确实是不直观。
小结
gc调优需要分析业务资源选择几种垃圾回收器的组合然后通过类似prometheus这样的监控来对比gc各种参数以及配套参数中的细节效果。
gc调优我们到底在调整什么的更多相关文章
- troubleshoot之:GC调优到底是什么
目录 简介 那些GC的默认值 GC的选择 GC的最大线程个数 初始化heap size 最大的heap size 分层编译技术 我们到底要什么 最大暂停时间 吞吐率 简介 我们经常会听到甚至需要自己动 ...
- Java GC 专家系列3:GC调优实践
本篇是”GC专家系列“的第三篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种G ...
- 性能测试系列-java gc调优
性能测试中除了需要做好性能测试外,我们还需要做性能测试后的,性能调优,需要发现性能问题,也需要做性能调优,在做性能调优中,jvm的性能调优是经常遇到的一个. 随着jdk版本的迅速变化,jdk里面的GC ...
- 八张图彻底了解JDK8 GC调优秘籍-附PDF下载
目录 简介 分代垃圾回收器的内存结构 JDK8中可用的GC 打印GC信息 内存调整参数 Thread配置 通用GC参数 CMS GC G1参数 总结 简介 JVM的参数有很多很多,根据我的统计JDK8 ...
- 为什么Java有GC调优而没听说过有CLR的GC调优?
前言 在很多的场合我都遇到过一些群友提这样的一些问题: 为什么Java有GC调优而CLR没有听说过有GC调优呢? 到底是Java的JVM GC比较强还是C#使用的.NET CLR的GC比较强呢? 其实 ...
- GC参考手册 —— GC 调优(基础篇)
GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理.初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试.其 ...
- GC调优
Gc调优的目标:1.降低停顿时间 2.提高吞吐量 3.避免full-gc 调优可以使用的手段:1.各个内存区的大小调整:堆,年轻代,老年代,方法区等等2.减少短暂对象的存活时间,提高长期对象的复用率( ...
- GC调优在Spark应用中的实践(转载)
Spark是时下非常热门的大数据计算框架,以其卓越的性能优势.独特的架构.易用的用户接口和丰富的分析计算库,正在工业界获得越来越广泛的应用.与Hadoop.HBase生态圈的众多项目一样,Spark的 ...
- GC调优入门笔记
想给项目代码做做调优但有许多疑惑,比如有哪些参数要调.怎么调.使用什么工具.调优的效果如何定量测量等.发现Oracle的这份资料不错,简洁直接,回答了我的许多问题,给了许多很实用的大方向上的指导.将其 ...
随机推荐
- 腾讯云 网站开启HTTPS
下图是我站点的初始化样子,可以看到只是输出一个字符串,啥也没有,并且没有https. 这无所谓,因为我们的重点是https,而不是网站内容 接下来就是配置https的关键步骤了,其实只需要三步而已: ...
- win7使用问题解决
1. VM和主机互相PING不通 问题:桥接模式,VM可以ping 通外网,可以ping 通局域网其它机子,就是ping 不通本地主机 解决:将 vm网卡和本地网连接网卡都共享出来
- windows 10下oracle相关异常及处理方法
话说起来,不以oracle性能优化,数据库维护为主业已经有四五年了,这两年基本上以mysql为主. pl/sql登录后提示空白对话框.将ORACLE_HOME设置为oracle 11g的目录. IMP ...
- C语言动态链表数据结构
链表的操作增删改查 typedef int DATA; struct SNode { DATA data; SNode* pNext; }; SNode* g_head=NULL;//全局变量 //从 ...
- 启动maven的web项目
一.可以通过在pom中配置tomcat插件. 首先要确保你的仓库里有这个插件,然后按如下配置. <build> <plugins> <!-- 配置Tomcat插件 --& ...
- 测试浏览器对HTML5标签的支持
使用相应的浏览器打开链接 https://html5test.com/即可在该页面查看到测试结果.
- Spring 学习——Spring JSR注解——@Resoure、@PostConstruct、@PreDestroy、@Inject、@Named
JSR 定义:JSR是Java Specification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正 ...
- Java:The hierarchy of the type is inconsistent错误
错误 The type com.jiuqi.dna.ui.language.INLStringGroup cannot be resolved. It is indirectly referenced ...
- 05文件合并脚本--By Mark Lutz
''' 合并split.py创建的目录下的所有组分文件以重建文件. 依赖文件名的排序:长度必须一致. ''' import os,sys readsize=1024 def join(fromdir, ...
- css的再深入4(更新中···)
两种居中的方式: Margin:0 auto;和text-align:center; Margin的居中是对自身,text-align对元素内部的文本来说. 隐藏的两种方式: visibility:h ...