GC优化案例

作者: ML李嘉图

优化案例

Service S 优化

现在看一下执行jstat -gcutil的结果

S0 S1 E O P YGC YGCT FGC FGCT GCT
12.16 0.00 5.18 63.78 20.32 54 2.047 5 6.946 8.993

左边的Perm区的值对于最初的GC优化并不重要,而YGC参数的值更加对于这次优化更为重要。

平均执行一次Minor GC和Full GC消耗的时间如下表所示: Service S的Minor GC 和Full GC的平均执行时间

GC类型GC执行次数GC执行时间平均值
Minor GC542.047s37ms
Full GC56.946s1.389s
**37ms**对于Minor GC来说还不赖,但1.389s对于Full GC来说意味着当GC发生在数据库Timeout设置为1s的系统中时,可能会频繁出现超时现象。

首先,你需要检查开始GC优化前内存的使用情况。

使用`jstat -gccapacity`命令可以检查内存用量情况。在笔者的服务器上查看到的结果如下:
    NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
    212992.0 212992.0 212992.0 21248.0 21248.0 170496.0 1884160.0 1884160.0 1884160.0 1884160.0 262144.0 262144.0 262144.0 262144.0 54 5

其中的关键值如下:
* 新生代内存用量:212,992 KB
* 老年代内存用量:1,884,160 KB

因此,除了永久代以外,被分配的内存空间加起来有2GB,并且新生代:老年代=1:9,为了得到比使用`jstat`更细致的结果,还需加上`-verbosegc`参数获取日志,并把三台服务器按照如下方式设置(除此以外没有使用任何其他参数):
* NewRatio=2
* NewRatio=3
* NewRatio=4

一天后得到了系统的GC log,幸运的是,在设置完NewRatio后系统没有发生任何Full GC。
**这是为什么呢?**这是因为大部分对象在创建后很快就被回收了,所有这些对象没有被传入老年代,而是在新生代就被销毁回收了。

在这样的情况下,就没有必要去改变其他的参数值了,只要选择一个最合适的`NewRatio`值即可。

那么,**如何确定最佳的NewRatio值呢?** 为此,们分析一下每种`NewRatio`值下Minor GC的平均响应时间。

在每种参数下Minor GC的平均响应时间如下:
* NewRatio=2:45ms
* NewRatio=3:34ms
* NewRatio=4:30ms

们可以根据GC时间的长短得出NewRatio=4是最佳的参数值(尽管NewRatio=4时新生代空间是最小的)。

在设置完GC参数后,服务器没有发生Full GC。

为了说明这个问题,下面是服务执行一段时间后执行`jstat --gcutil`的结果:
    S0 S1 E O P YGC YGCT FGC FGCT GCT
    8.61 0.00 30.67 24.62 22.38 2424 30.219 0 0.000 30.219

你可能会认为是服务器接收的请求少才使得GC发生的频率较低,实际上,虽然Full GC没有执行过,但Minor GC被执行了2424次。  
> 原文创作:ML李嘉图
>
> 原文链接:https://www.cnblogs.com/zwtblog/p/15206573.html

## 文章列表
- [项目MyBlog](https://www.oomspot.com/post/xiangmumyblog)
- [阶段总结Java基础超进阶](https://www.oomspot.com/post/jieduanzongjiejavajichuchaojinjie)
- [链表题解](https://www.oomspot.com/post/lianbiaotijie)
- [郭德纲罗翔语录](https://www.oomspot.com/post/guodegangluoxiangyulu)
- [语录转载](https://www.oomspot.com/post/yuluzhuanzai)
- [设计模式更新中](https://www.oomspot.com/post/shejimoshigengxinzhong)
- [设计模式图解](https://www.oomspot.com/post/shejimoshitujie)
- [论坛项目](https://www.oomspot.com/post/luntanxiangmu)
- [计算机网络汇总](https://www.oomspot.com/post/jisuanjiwangluohuizong)
- [计算机网络TCP篇](https://www.oomspot.com/post/jisuanjiwangluotcppian)
- [计算机网络IP篇](https://www.oomspot.com/post/jisuanjiwangluoippian)
- [计算机网络HTTP篇](https://www.oomspot.com/post/jisuanjiwangluohttppian)
- [计算机组成原理图解](https://www.oomspot.com/post/jisuanjizuchengyuanlitujie)
- [计算机组成原理初见](https://www.oomspot.com/post/jisuanjizuchengyuanlichujian)
- [自定义starter](https://www.oomspot.com/post/zidingyistarter)
- [缓存穿透,击穿,雪崩详解](https://www.oomspot.com/post/huancunchuantoujichuanxuebengxiangjie)
- [笔试格式](https://www.oomspot.com/post/bishigeshi)
- [温故知新输入网址显示网页到底到底到底到底发生了什么?](https://www.oomspot.com/post/wenguzhixinshuruwangzhixianshiwangyedaodidaodidaod)
- [深度学习之神经网络的结构](https://www.oomspot.com/post/shenduxuexizhishenjingwangluodejiegou)
- [栈和队列题解方法](https://www.oomspot.com/post/zhanheduilietijiefangfa)
- [数组LeetCode笔试](https://www.oomspot.com/post/shuzuleetcodebishi)
- [数据结构](https://www.oomspot.com/post/shujujiegou)
- [数据库事故](https://www.oomspot.com/post/shujukushigu)
- [操作系统初见?见了好多次,次次都要学!](https://www.oomspot.com/post/caozuoxitongchujianjianlehaoduocicicidouyaoxue)
- [怎么通俗的理解Netty呢?](https://www.oomspot.com/post/zenmetongsudelijienettyni)
- [富文本编辑器SpringBoot](https://www.oomspot.com/post/fuwenbenbianjiqispringboot)
- [字符串题解方法](https://www.oomspot.com/post/zifuchuantijiefangfa)
- [基础算法学习](https://www.oomspot.com/post/jichusuanfaxuexi)
- [双指针题解](https://www.oomspot.com/post/shuangzhizhentijie)
- [刷题加油](https://www.oomspot.com/post/shuatijiayou)
- [分布式锁初见](https://www.oomspot.com/post/fenbushisuochujian)
- [互联网基础架构图解](https://www.oomspot.com/post/hulianwangjichujiagoutujie)
- [二叉树题解方法](https://www.oomspot.com/post/erchashutijiefangfa)
- [三体语录](https://www.oomspot.com/post/santiyulu)
- [Swagger初见](https://www.oomspot.com/post/swaggerchujian)
- [Spring初见](https://www.oomspot.com/post/springchujian)
- [SpringSecurity图解](https://www.oomspot.com/post/springsecuritytujie)
- [SpringSecurityShiro初见](https://www.oomspot.com/post/springsecurityshirochujian)
- [SpringBoot异步定时邮件任务](https://www.oomspot.com/post/springbootyibudingshiyoujianrenwu)
- [SpringBootWeb初见](https://www.oomspot.com/post/springbootwebchujian)
- [SprinBootSpringData整合](https://www.oomspot.com/post/sprinbootspringdatazhenghe)
- [SpingBootDubboZookeeper分布式](https://www.oomspot.com/post/spingbootdubbozookeeperfenbushi)
- [Shiro登陆流程认证图解](https://www.oomspot.com/post/shirodengluliuchengrenzhengtujie)
- [Redis数据类型应用场景](https://www.oomspot.com/post/redisshujuleixingyingyongchangjing)
- [Redis conf分析](https://www.oomspot.com/post/redisconffenxi)
- [Radius协议学习](https://www.oomspot.com/post/radiusxieyixuexi)
- [RabbitMQ进阶](https://www.oomspot.com/post/rabbitmqjinjie)
- [RabbitMQ初见](https://www.oomspot.com/post/rabbitmqchujian)
- [Netty初见三大组件简单使用](https://www.oomspot.com/post/nettychujiansandazujianjiandanshiyong)
- [MySql分区、分表和分库](https://www.oomspot.com/post/mysqlfenqufenbiaohefenku)
- [MySQL实战45讲2125笔记](https://www.oomspot.com/post/mysqlshizhan45jiang2125biji)
- [MySQL实战45讲1620笔记](https://www.oomspot.com/post/mysqlshizhan45jiang1620biji)
- [MySQL实战45讲1015笔记](https://www.oomspot.com/post/mysqlshizhan45jiang1015biji)
- [Linux实战常用命令](https://www.oomspot.com/post/linuxshizhanchangyongmingling)
- [Java爬虫小项目](https://www.oomspot.com/post/javapachongxiaoxiangmu)
- [JavaNIO](https://www.oomspot.com/post/javanio)
- [JVM调优命令](https://www.oomspot.com/post/jvmdiaoyoumingling)
- [JVM深入](https://www.oomspot.com/post/jvmshenru)
- [JVM初见](https://www.oomspot.com/post/jvmchujian)
- [JVM优化](https://www.oomspot.com/post/jvmyouhua)
- [JAVA中直接用Jdbc就能操作数据库了,为什么还要用spring框架?](https://www.oomspot.com/post/javazhongzhijieyongjdbcjiunengcaozuoshujukuleweish)
- [Hash题解方法](https://www.oomspot.com/post/hashtijiefangfa)
- [HashMap的转化时机](https://www.oomspot.com/post/hashmapdezhuanhuashiji)
- [HashMap源码分析](https://www.oomspot.com/post/hashmapyuanmafenxi)
- [Github博客园初见](https://www.oomspot.com/post/githubchujian)
- [GC优化案例](https://www.oomspot.com/post/gcyouhuaanli)
- [ElasticSearch7 X X初见模仿京东搜索的实战](https://www.oomspot.com/post/elasticsearch7xxchujianmofangjingdongsousuodeshizh)
- [Docker初见](https://www.oomspot.com/post/dockerchujian)
- [CI/CD企业级DevOps](https://www.oomspot.com/post/cicdqiyejidevops)

更多推荐

更多
  • Ansible2安全自动化-十、编写安全测试的 Ansible 模块 开始使用 hello world Ansible 模块,密码,建立开发环境,计划和要记住的内容,OWASP ZAP 模块,使用 Docker 创建 ZAP,创建易受攻击的应用,Ansible 模块模板,[计]元数据,记录模块,源代码模板
    Apache CN

  • Ansible2安全自动化-十一、可靠的安全最佳实践、参考和进一步阅读 十一、可靠的安全最佳实践、参考和进一步使用 Ansible 的保管库,如何对变量和文件使用 Ansible Vault,Ansible Vault 单一加密变量,Ansible 拱顶在 Ansible 塔中的应用,设置和使用可扫描集群,
    Apache CN

  • Ansible2安全自动化-九、用于取证收集和恶意软件分析的自动化实验室设置 为隔离环境的实验室创建可行的行动手册,收集文件和域恶意软件识别和分类,病毒总应用编程接口工具设置,病毒总应用编程接口扫描恶意软件样本,设置布谷鸟沙盒环境,设置布谷鸟主机,设置布谷鸟客人,使用 Ansible 行动手册提交样品和报告,使用
    Apache CN

  • Ansible2安全自动化-八、Docker 容器的持续安全扫描 理解连续安全概念,使用 Ansible 自动化 Docker 容器的漏洞评估,安全 Docker 工作台,克莱尔,为了 Docker 安全,使用 Ansible Tower 进行计划扫描,锚,锚定的引擎服务设置,锚定 cli 扫描仪,使
    Apache CN

  • Ansible2安全自动化-四、日志监控和无服务器自动防御(AWS 中的弹性栈) 四、日志监控和无服务器自动防御AWS 中的弹性栈弹性叠层介绍,弹性搜索,logstash(日志记录),马纳人,搜索,我们为什么要使用弹性栈进行安全监控和警报?,设置弹性栈的先决条件,设置弹性栈,Logstash 集成,马纳人,弹性纤维,
    Apache CN

  • Ansible2安全自动化-五、使用 OWASP ZAP 实现网络应用安全测试自动化 安装 OWASP ZAP,安装 Docker 运行时,OWASP ZAP 坞站容器设置,处理容器的专用工具——Ansible 容器,配置 ZAP 基线扫描,运行易受攻击的应用容器,运行 OWASP 扫描程序基线扫描,针对网络应用和网站的
    Apache CN

  • Ansible2安全自动化-六、利用 Nessus 进行漏洞扫描 尼斯介绍,安装 Nessus 进行漏洞评估,配置 Nessus 进行漏洞扫描,对网络执行扫描,基本网络扫描,使用自动扫描运行扫描,设置自动用户,使用自动扫描运行扫描,列出当前可用的扫描和标识,使用扫描标识启动指定的扫描,存储结果,安装
    Apache CN

  • Ansible2安全自动化-七、应用和网络的安全强化 使用 CIS、STIGs 和 NIST 等基准强化安全性,使用 Ansible 行动手册强化基线操作系统,STIGs 在 Linux 主机自动安全强化方面的可替代角色,使用 Ansible Tower 对 OpenSCAP 进行持续的安
    Apache CN

  • Ansible2安全自动化-三、使用加密自动备份设置加固 WordPress WordPress 命令行界面,为什么要为这种设置负责?,一个完整的 WordPress 安装步骤,正在设置 nginx web 服务器,设置先决条件,建立 MySQL 数据库,为 WordPress 安装程序安装 PHP,使用命令行界
    Apache CN

  • Ansible2安全自动化-二、Ansible Tower、Jenkins 和其他自动化工具 调度工具支持自动化的下一个抽象,起床跑步,设置可平移的塔,设置 Jenkins,设置运行平台,安全自动化用例,添加行动手册,Ansible 的塔式配置,Jenkins Ansible 集成配置,运行平台配置,认证和数据安全,RBAC 代
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多