高并发场景下jvm调优实践之路(代码片段)

vivo互联网技术 vivo互联网技术     2022-11-28     456

关键词:

作者:vivo互联网技术团队
Li Guanyun、 Jessica Chen


一、背景


2021年2月,收到反馈,视频APP某核心接口高峰期响应慢,影响用户体验。


通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图:




可以看出,在观察周期里:

  • 平均每10分钟GC次数66次,峰值为470次;

  • 平均每10分钟Full GC次数0.25次,峰值5次;


  • 可见GC非常频繁,GC在特定的时段也比较频繁,存在较大的优化空间。由于对GC停顿的优化是降低接口的P99时延一个有效的手段,所以决定对该核心服务进行JVM调优。


    二、优化目标


  • 接口P99时延降低30%

  • 减少Young GC和Full GC次数、停顿时长、单次停顿时长


  • 由于GC的行为与并发有关,例如当并发比较高时,不管如何调优,Young GC总会很频繁,总会有不该晋升的对象晋升触发Full GC,因此优化的目标根据负载分别制定:


    目标1:高负载(单机1000 QPS以上)


  • Young GC次数减少20%-30% ,Young GC累积耗时不恶化;

  • Full GC次数减少50%以上,单次、累积Full GC耗时减少50%以上,服务发布不触发Full GC。


  • 目标2:中负载(单机500-600)


  • Young GC次数减少20%-30% ,Young GC累积耗时减少20%;

  • Full GC次数不高于4次/天,服务发布不触发Full GC。


  • 目标3:低负载(单机200 QPS以下)


  • Young GC次数减少20%-30% ,Young GC累积耗时减少20%;

  • Full GC次数不高于1次/天,服务发布不触发Full GC。


  • 三、当前存在的问题


    当前服务的JVM配置参数如下:

  • 31247
  • 灵活运用分布式锁解决数据重复插入问题

  • 深度解析 Lucene 轻量级全文索引实现原理

  • Kafka万亿级消息实战

  • 高并发场景下请求合并的实践(代码片段)

    ...要提供相应的批量接口,好的批量实现能够提升性能。高并发场景中,调用批量接口相比调用非批量接口有更大的性能优势。但有时候,请求更多的是单个接口,不能够直接调用批量接口,如果这个接口是高频接口,对其做请求... 查看详情

    jvm调优--02---jvm规划和预调优案例(代码片段)

    ...:Serial=>Parallel(并行)=>CMS(并发)=>G1=>ZGC怎么选择垃圾回收器最后需要明确一个观点:什么是调优?1.JVM规划和预调优调优,从==业务场景==开始,没有业务场... 查看详情

    高并发服务优化篇:从rpc预热转发看服务端性能调优(代码片段)

    ????????关注后回复 “进群” ,拉你进程序员交流群????????作者丨Coder的技术之路来源丨Coder的技术之路Part1RPC为了性能做了哪些努力1.1Provider分组和直连路由寻址,负载均衡是很好,可以保证流量均匀从而保护服务节... 查看详情

    [转]jvm调优系列&高并发java系列

     1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com/18740.html3.JVM调优总结(3):垃圾回收面临的问题:http://www.importnew.com/18747.html4.JVM调优总结(4):分代垃... 查看详情

    高并发场景下的限流策略(代码片段)

    高并发场景下的限流策略:  在开发高并发系统时,有很多手段来保护系统:缓存、降级、限流。  当访问量快速增长、服务可能会出现一些问题(响应超时),或者会存在非核心服务影响到核心流程的性能时,仍然需要保... 查看详情

    jvm系列之性能调优参考手册(实践篇)(代码片段)

    JVM系列之性能调优参考手册(实践篇)系列博客专栏:JVM系列博客专栏SpringBoot系列博客1、前言介绍在前面章节的学习,我们对JVM的体系架构等等有了比较详细的了解,所以可以对这些理论进行实践,当然... 查看详情

    jvm调优的几种场景(建议收藏)(代码片段)

    ...道何时对JVM进行调优。今天,就为大家介绍几种JVM调优的场景。点击上方,关注我,java干货及时送达在阅读本文时,假定大家已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器。cpu占用过高c... 查看详情

    jvm调优的几种场景(建议收藏)(代码片段)

    ...时对JVM进行调优。今天,冰河就为大家介绍几种JVM调优的场景。点击上方卡片关注我在阅读本文时,冰河假定大家已经了解了运行时的数据区域和常用的垃圾回收算法,也了解了Hotspot支持的垃圾回收器。cpu占用过高cpu占用过高... 查看详情

    jvm调优快速定位服务cpu过高(理论+实战)(代码片段)

    ...中,有时会遇到一些CPU占用过高,一直下不去的场景。出现这种情况,可能会导致服务对外中断,服务器超负荷运行影响硬件寿命。这篇文章从实践出发,一步一步地分析如何使用top和jstack命令快速定位问题... 查看详情

    day792.并发容器的使用-java性能调优实战(代码片段)

    并发容器的使用:识别不同场景下最优容器Hi,我是阿昌,今天学习记录的是关于并发容器的使用:识别不同场景下最优容器。一、并发场景下的Map容器假设现在要给一个电商系统设计一个简单的统计商品销量TOP10... 查看详情

    高并发场景下的httpclient优化使用(代码片段)

    1.背景我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。先对比前后:优化之前,平均执行... 查看详情

    elasticsearch性能优化实践(jvm调优+es调优)

    ...ES的write的性能。ES的优化分为很多方面,我们要根据使用场景考虑对ES的要求。根据个人实践经验,列举三种不同场景下的特点:这三类场景的特点如下:关于实时性可以从三方面进行优化:JVM性能调优、ES性能调优、控制数据... 查看详情

    高并发场景下优化加锁方式:线程等待与通知机制(代码片段)

    本文分享自华为云社区《【高并发】讲讲高并发场景下如何优化加锁方式?》,作者:冰河。互斥条件、不可剥夺条件、请求与保持条件、循环等待条件,这是产生死锁时的四个必要条件,只有四个条件同时... 查看详情

    jvm调优(代码片段)

    ...种情况都可能导致垃圾回收不能够达到预想的效果。对于场景问题,可以从如下几个大方向进行设计:大访问压力下,MGC频繁一些是正常的,只要MGC延迟不导致停顿时间过长或者引发FGC,那可以适当的增大Eden... 查看详情

    这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!(代码片段)

    前言之前一直有小伙伴私信我问我高并发场景下的订单和库存处理方案,我最近也是因为加班的原因比较忙,就一直没来得及回复。今天好不容易闲了下来想了想不如写篇文章把这些都列出来的,让大家都能学习到,说一千道一... 查看详情

    最佳实践服务端高并发分布式架构演进之路

    1.概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原... 查看详情

    jvm性能调优--ygc(代码片段)

    ????????关注后回复 “进群” ,拉你进程序员交流群????????作者丨Coder的技术之路来源丨Coder的技术之路YGCYGC频次暂且忽略,问题主要集中在gc耗时上面。想要解决YGC耗时问题,首先要搞清楚YGC的耗时节点。(据我... 查看详情

    spark学习之路(十三)sparkcore的调优之资源调优jvm的基本架构[转](代码片段)

    JVM的结构图Java内存结构JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、FromSurvivor空间、ToSurvivor空间,默认情况下年轻代按照8:1:1的比例... 查看详情