高并发场景下JVM调优实践之路

Posted vivo互联网技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发场景下JVM调优实践之路相关的知识,希望对你有一定的参考价值。

作者: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万亿级消息实战

  • 服务API版本控制设计与实践

  • 高并发场景下JVM调优实践之路

  • Percolator模型及其在TiKV中的实现

  • Android模块化开发实践

  • 以上是关于高并发场景下JVM调优实践之路的主要内容,如果未能解决你的问题,请参考以下文章

    「JVM」调优参数总结

    高并发场景下 RabbitMQ 消费端服务限流实践

    新一代垃圾回收器 ZGC 的探索与实践

    Day810.MySQL调优之事务:高并发场景下的数据库事务调优 -Java 性能调优实战

    JVM调优

    [转] JVM 调优系列 & 高并发Java系列