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的这份资料不错,简洁直接,回答了我的许多问题,给了许多很实用的大方向上的指导.将其 ...
随机推荐
- Fiddler(二)Fiddler操作界面[工具条]和[底部状态面板]说明
工具条说明 下面从左往右介绍一下每个按钮在工作中能起到什么作用,我这里是汉化版,所以顾名思义大家也能大概明白,并且鼠标在对应的图标上停留会有官方解释.下面再稍微补充一下 从第二个按钮说起,也就是小气泡 ...
- jQuery知识总结(转)
原文:http://fwhyy.com/2013/04/jquery-knowledge-summary/ 这篇文章在于筛选器的简单例子,让人一看就懂代码的作用 20170223 前言 jQuery一 ...
- HAProxy实现slave负载均衡[高可用]
下面要执行的是HAProxy部分 这是一个集群,其他的部分在: mysql-cluster 7.3.5安装部署 mysql主备部署[高可用] mysql主备切换[高可用] mysql读写分离[高可用] ...
- applyColorMap()研究(如果我对现有的colormap不满意,那么如何具体来做)
cv::applyColorMap()能够实现预定义的伪彩色,这个是众所周知的事情. 并且和matlab提供的很相近 除了这些预置的变换,如果我想实现新的变换,需要做LUT变换 cv::Mat ...
- day 26 元类
一.isinstance issubclass class Person: passclass Student(Person): passstu1=Student()#判断是不是实例print(isi ...
- 【Python047-魔法方法:定制序列】
一.协议是什么 1.协议(protocols)与其他编程语言中的接口很相似,它规定你那些方法必须要定义.然而在Python中协议就显的不那么正式,事实上,在Python中,协议更像是一种指南 2.容器 ...
- 又是DataSnap的问题
最近在调试DataSnap的程序,突然发现TClientDataSet打不开了,报错为dsnap200.bpl的非法地址访问,如下图: 很是怪异,干脆新建工程,只有TSQLConnection.TSQ ...
- Python3 tkinter基础 Label compound 图片上显示文字 fg字体颜色 font字体大小
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Ground Defense【不知道叫啥可能就是枚举】
问题 G: Ground Defense 时间限制: 1 Sec 内存限制: 128 MB 提交: 116 解决: 22 [提交] [状态] [命题人:admin] 题目描述 You are a ...
- 深入了解JVW
Java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时 ...