基本的调优思路可以总结为:

  • 理解应用需求和问题,确定调优目标。假设,我们开发了一个应用服务,但发现偶尔会出现性能抖动,出现较长的服务停顿。
  • 评估用户可接受的响应时间和业务量,将目标简化为,希望GC暂停尽量控制在200ms以内,并且保证一定标准的吞吐量。
  • 掌握JVM和GC的状态,定位具体的问题,确定真的有GC调优的必要。具体有很多方法,比如,通过jstat等工具查看GC等相关状态,可以开启GC日志,或者是利用操作系统提供 的诊断工具等。例如,通过追踪GC日志,就可以查找是不是GC在特定时间发生了长时间的暂停,进而导致了应用响应不及时。
  • 这里需要思考,选择的GC类型是否符合我们的应用特征,如果是,具体问题表现在哪里,是Minor GC过长,还是Mixed GC等出现异常停顿情况;如果不是,考虑切换到什么类型,如CMS和G1都是更侧重于低延迟的GC选项。
  • 通过分析确定具体调整的参数或者软硬件配置。
  • 验证是否达到调优目标,如果达到目标,即可以考虑结束调优;否则,重复完成分析、调整、验证这个过程。

具体操作:

吞吐量优先的并行收集器
并行收集器主要以到达一定的吞吐量为目标,适用于后台处理

响应时间优先的并发收集器
并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间。适用于应用服务器、电信领域等。

年轻代大小选择
响应时间优先的应用:尽可能设置大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时减少到达年老代的对象。
吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度,因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8核CPU以上应用。

年老代大小选择
响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可能会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考一下数据获得:
1、并发垃圾收集信息
2、持久代并发收集次数
3、传统GC信息
4、花在年轻代和年老代回收上的时间比例减少年轻代和年老代花费的时间,一般会提高应用的效率

吞吐量优先的应用
一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期对象,而年老代尽存放长期存活的对象

较小堆引起的碎片问题
因为年老代的并发收集器使用标记、清除算法,所以不会对堆进行压缩。当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象。但是当堆空间较小时,运行一段时间以后,就会出现“碎片”,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记、清除方式进行回收。

谈谈你的GC调优思路?相关推荐

  1. 再谈GC3:GC调优思路与常用工具

    5. GC 调优(基础篇) - GC参考手册 2017年02月14日 17:41:49 阅读数:4893 说明: Capacity: 性能,能力,系统容量; 文中翻译为"系统容量" ...

  2. 线上RPC超时故障排查及后续GC调优思路

    本文记录了一次线上RPC服务调用超时问题的排查流程,排查过程中涉及到 JVM 优化的过程与思路,包括 JVM GC 原理以及问题排查思路,分享出来希望对大家有所帮助. 本文概要 RPC服务异常和排查过 ...

  3. JVM-G1 性能调优思路与实战

    现在大多数公司的Java生产版本都是再JDK8,所以本次性能调优主要针对G1来展开 GC的主要回收区域就是年轻代(young gen).老年代(tenured gen).持久区(perm gen),在 ...

  4. 一文看尽 JVM GC 调优

    一个著名的学习方法论 向橡皮鸭求助 学会提问,提问也是一门艺术 提问前,先投入自己的时间做好功课 发生了什么事情 问题的基本情况 你投入的研究和发现 能正确提出你的问题,你的问题差不多已经解决一半 深 ...

  5. JVM调优思路、订单秒杀jvm调优案例

    文章目录 1. jvm调优思路 2. 订单的秒杀模块jvm调优案例 1. jvm调优思路 jvm调优其实更多的是对GC的优化,尤其是尽量减少full GC. 大多数情况下,对象在Eden区分配,当Ed ...

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

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

  7. 关于CLR GC调优的一些问题

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

  8. java eden space_JVM GC调优一则–增大Eden Space提高性能

    缘起 线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增. 思路 思路是Tomcat本身的代码应该是没有问题的,有问题的可能 ...

  9. JVM GC调优--增大Eden Space提高性能

    起因 线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增. 思路 思路是Tomcat本身的代码应该是没有问题的,有问题的可能 ...

最新文章

  1. 【GoLang】tcmalloc jemalloc
  2. 两个奇技淫巧,将 Docker 镜像体积减小 99%
  3. rpm安装文件制作和使用
  4. 优酷蓝鲸近千节点的Redis集群运维经验总结
  5. Android 节操视频播放器jiecaovideoplayer自定义播放音频使用:屏蔽全屏按钮,增加倒计时,当前时间/总时间
  6. 每次新建Android项目都报样式找不到的错误?
  7. grubbs检测c语言,Grubbs算法检测离群值
  8. 一个内存增长问题的分析和处理(二)——valgrind工具的用法
  9. windows 2008 r2 AD密码策略
  10. LeetCode 387:first-unique-character-in-a-string
  11. ieee754标准_比特与信息在计算机中的表示及补码和浮点数的IEEE 754标准
  12. C# 处理XML的基本操作
  13. 关于联想oem系统激活方法尝试
  14. 云计算安全知识CCSK V4 知多少
  15. python实现爬取网页将特定信息存入excel
  16. Android_ 弹出菜单创建
  17. 双活数据中心概念及优缺点介绍
  18. 定义一个长方形类,求周长和面积--学习笔记--16
  19. 游戏直播的下一站在哪?战旗TV开启线上线下联动
  20. 2022-2028全球小脑牵引器行业调研及趋势分析报告

热门文章

  1. 牛逼! IDEA 2020 要本土化,真的是全中文了!
  2. 计算机基础--认识CPU
  3. PPIO创始人王闻宇:从PPTV到PPIO,创业路上的挑战与思考
  4. B端运营级视频服务技术平台搭建
  5. 音视频技术开发周刊(第126期)
  6. 开发一个爆款 VS Code 插件这么简单!
  7. 腾讯云IoT全栈方案助力智慧交通基建,详解四大重点与两个案例
  8. 这一次,腾讯用AI让手语“发声”
  9. AI:你们是不是在等一顶红帽子?
  10. 利剑无意之面试题(二)