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调优我们到底在调整什么的更多相关文章

  1. troubleshoot之:GC调优到底是什么

    目录 简介 那些GC的默认值 GC的选择 GC的最大线程个数 初始化heap size 最大的heap size 分层编译技术 我们到底要什么 最大暂停时间 吞吐率 简介 我们经常会听到甚至需要自己动 ...

  2. Java GC 专家系列3:GC调优实践

    本篇是”GC专家系列“的第三篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种G ...

  3. 性能测试系列-java gc调优

    性能测试中除了需要做好性能测试外,我们还需要做性能测试后的,性能调优,需要发现性能问题,也需要做性能调优,在做性能调优中,jvm的性能调优是经常遇到的一个. 随着jdk版本的迅速变化,jdk里面的GC ...

  4. 八张图彻底了解JDK8 GC调优秘籍-附PDF下载

    目录 简介 分代垃圾回收器的内存结构 JDK8中可用的GC 打印GC信息 内存调整参数 Thread配置 通用GC参数 CMS GC G1参数 总结 简介 JVM的参数有很多很多,根据我的统计JDK8 ...

  5. 为什么Java有GC调优而没听说过有CLR的GC调优?

    前言 在很多的场合我都遇到过一些群友提这样的一些问题: 为什么Java有GC调优而CLR没有听说过有GC调优呢? 到底是Java的JVM GC比较强还是C#使用的.NET CLR的GC比较强呢? 其实 ...

  6. GC参考手册 —— GC 调优(基础篇)

    GC调优(Tuning Garbage Collection)和其他性能调优是同样的原理.初学者可能会被 200 多个 GC参数弄得一头雾水, 然后随便调整几个来试试结果,又或者修改几行代码来测试.其 ...

  7. GC调优

    Gc调优的目标:1.降低停顿时间 2.提高吞吐量 3.避免full-gc 调优可以使用的手段:1.各个内存区的大小调整:堆,年轻代,老年代,方法区等等2.减少短暂对象的存活时间,提高长期对象的复用率( ...

  8. GC调优在Spark应用中的实践(转载)

    Spark是时下非常热门的大数据计算框架,以其卓越的性能优势.独特的架构.易用的用户接口和丰富的分析计算库,正在工业界获得越来越广泛的应用.与Hadoop.HBase生态圈的众多项目一样,Spark的 ...

  9. GC调优入门笔记

    想给项目代码做做调优但有许多疑惑,比如有哪些参数要调.怎么调.使用什么工具.调优的效果如何定量测量等.发现Oracle的这份资料不错,简洁直接,回答了我的许多问题,给了许多很实用的大方向上的指导.将其 ...

随机推荐

  1. OpenGL: 实现立体显示

    https://blog.csdn.net/augusdi/article/details/19922295 立体显示原理:设没有立体显示的模型视图矩阵ModelView为Mv,投影矩阵为Mp,则.物 ...

  2. org.springframework.dao.DuplicateKeyException

    org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [insert into account v ...

  3. 模拟实现ATM+购物商城程序

    流程图: 需求: ATM:模拟实现一个ATM + 购物商城程序额度 15000或自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消 ...

  4. 2018-2019-1 20189206 《Linux内核原理与分析》第四周作业

    linux内核分析学习笔记 --第三章 MenuOS的构造 计算机的"三大法宝"和操作系统的"两把宝剑" 三大法宝 程序存储计算机 即冯诺依曼体系结构,基本上是 ...

  5. oracle数据库数据库表空间查询及扩充

    1.查询表空间,及表空间的大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...

  6. topcoder srm 505 div1

    problem1 link 设行数为$n$列数为$m$ 对于任意的两行$r_{1},r_{2}$以及任意的两列$c_{1},c_{2}$所确定的四个格子,只要知道其中的三个就能确定第四个,且必须要三个 ...

  7. Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  8. hihoCoder week4 Trie图

    ac自动机 题目链接 https://hihocoder.com/contest/hiho4/problem/1 参考:https://blog.csdn.net/baidu_30541191/art ...

  9. C# 里调用vb的inputbox弹出窗

    https://blog.csdn.net/hutao1101175783/article/details/16800871 先对项目添加对Microsoft.VisualBasic的引用 Inter ...

  10. 题解——HDU 2089 不要62(数位DP)

    最近在学数位DP 应该是入门题吧 设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数 然后就是套路 注意\( limit \)的限制条件以及转移时候信息的 ...