加入收藏

一次访问Redis延时高问题排查与总结

2023-06-24 07:04:35 来源:技术联盟

寒亭 阿里开发者 2023-06-21 09:02 发表于浙江

阿里妹导读

作者抽丝剥茧的记录了一次访问Redis延时高问题的排查和总结。


(资料图片仅供参考)

背景

20230308 在某地域进行了线上压测, 发现接口RT频繁超时, 性能下降严重, P50 400ms+, P90 1200ms+, P99 2000ms+。

细致排查发现其中重要的原因是, 访问缓存rt竟然飙到了左右

作为高性能爱好者, 榨干CPU的每一分价值是我们的宗旨, 是可忍孰不可忍, 怎么能光空转, 不干活呢? 那就仔细分析下问题。

为啥Redis访问延时如此高?

我们简化下Redis访问流程如下:

可能性1: 服务端问题?

我们Redis使用的是 redis_amber_master_4xlarge_multithread 16C32G+480G SSD 规格, 最大QPS参考值24w, 最大连接数3w, 配置还是非常豪华的。 如下, QPS以及Load在峰值请求阶段, 都仍然处于低位。

可能性2: 物理网络问题?

如下, 请求远远没有达到机器带宽, 不是瓶颈. 另外单独看了网卡重传率等指标, 也都正常。

可能性3: 客户端问题?

那么很大概率就是客户端自身问题了. 我们把客户端详细放大如下:

根据当时ARMS监控结果如下, 虽然YGC次数与耗时有所上升, 但没有发生FGC:

把内存Dump出来, 分析JedisConnectionFactory几个相关重要指标, 发现问题有如下2个:

maxBorrowWaitTimeMills过大 : 即最大等待时间过久。在等待从连接池中获取连接, 最大等待了1200ms 。很大概率是因为block在连接池获取, 导致请求处理缓慢。 Redis连接创建销毁次数过多: createdCount 11555次; destroyedCount: 11553次。 说明max-idle参数设置不合理(on return的时候检查idle是否大于maxIdle, 如果大于则直接销毁该连接)。每个对象的创建就是一次TCP连接的创建, 开销较大。导致脉冲式请求过来时引发频繁创建/销毁, 也会影响整体性能。

顺便说一句: maxBorrowWaitTimeMills, createdCount, destroyedCount 几个metrics信息是JedisPool对象持久维护的全局变量信息, 只要JVM不重启, 这个信息就会一直存在。 这也就是为啥不需要在压测峰值时获取内存dump, 而是事后dump也可以。

此外, 如果细致探索JedisPool参数工作机制, 就需要了解apache的ObjectPool2的机制。刚好笔者在之前研究过ObjectPool, 后续会出单独文章阐述&对比ObjectPool, ObjectPool2, JedisPool以及经常踩坑的DruidPool的实现原理与差异。

本文就不再赘述, 敬请期待~

至此, 定位问题是JedisPool行为异常导致。

如何解决问题?

线上JedisPool实际参数

部分参数是由 继承而来

======-=60000

参数行为解析

max-active: 连接池的最大数量为100, 包括 idle + active. 注意, 这里被映射为了ObjectPool的maxTotal参数上。 连接池的最大空闲数量为16, 即如果return时, idleObject>=16, 则该对象直接被销毁。 启动后台线程, 每30s执行一次, 定时心跳保活与检测。 连接池最小空闲的连接数量为0. 即corePoolSize为0, 不会长期maintain一个固定的容量。

脉冲式请求引发的问题

我们把问题简化为如下序列, 即可发现问题所在. 在T2~T3内, 84个对象创建, 84个对象销毁. 造成了极大的损耗。

期望的行为模式

由于线上环境, Redis服务器配置较高, 为了能充分压榨性能, 同时应对容器场景下典型的突发峰值, 因此如下行为:

连接池的最大数量=连接池的最小数量=连接池的稳定数量. 即不要临时去创建连接, 防止等待过久。 需要定时心跳保活与检测, 及时删除掉超时/无效的连接。 不要因为idle时间过久而重建连接(只因为连接失效而重建)。防止无意义的大规模连接重建。
=500 // 线上稳定保有4台, 4*500=2000, 仍然远小于Redis规格支持的==30000 // 定时心跳保活与检测=500 // 连接池的稳定数量=true //定时心跳保活与检测=-1 // 每次保活检测, 都需要把500个连接都检测一遍. 如果设置为-2, 则每次检测1/2比例的的连接.=-1 // 不要因为idleTime大于某个阈值从而把连接给删除掉. 这样可以防止无意义的大规模连接重建。

效果验证

终于在20230413重新迎来了一波压测, 流量模型与上次相同。结果如下:

maxBorrowWaitTimeMills 下降比例接近 80% createdCount 也从之前的 11555次 下降到了 500次(即池子初始化的size) 业务侧整体性能也大幅提升, P50与P90均下降了将近60%, P99更是夸张地下降了70%。简直是amazing, 完结撒花!~

关键词:

相关新闻

刘家窑中医院王忠主任医生
刘家窑中医院王忠主任医生

王忠,主任医师,国医大师吕景山的弟子。毕业于武汉同......更多>

玖琰文化支持举办2023·6·6上海海派旗袍文化节圆满成功
玖琰文化支持举办2023·6·6上海海派旗袍文化节圆满成功

主持人宣布2023·6·6上海海派旗袍文化节开幕6月6日,......更多>

巅峰动力 顶峰相见,新日双芯双动力系列幻影F9真实力征服珠穆朗玛峰!
巅峰动力 顶峰相见,新日双芯双动力系列幻影F9真实力征服珠穆朗玛峰!

珠穆朗玛峰,一个令人生畏的名字;108道拐,一个通往......更多>

钟灵毓秀荟姑苏 大唐财富洞见唐小康走进人间天堂
钟灵毓秀荟姑苏 大唐财富洞见唐小康走进人间天堂

君到姑苏见,人家尽枕河。古宫闲地少,水巷小桥多。苏......更多>

2023国际数字能源展香港站在亚洲国际博览馆开幕,零碳科技闪耀香港!
2023国际数字能源展香港站在亚洲国际博览馆开幕,零碳科技闪耀香港!

数字驱动,能创未来。6月20日,由深圳市发展和改革委......更多>

端午骑行,尽情放“粽”!新日幻影F9状态已经拉满!
端午骑行,尽情放“粽”!新日幻影F9状态已经拉满!

仲夏端午,苍龙七宿飞升至正南中天,是龙飞天的吉日,......更多>

第一次玩影视IP!素士如何做到荧幕首秀即爆款?
第一次玩影视IP!素士如何做到荧幕首秀即爆款?

数次登顶全网榜单TOP1、腾讯视频2023年最快进入必看俱......更多>

【爱心公益】“阳光普照·共献爱心”优瑞德端午爱心公益之行圆满成功!
【爱心公益】“阳光普照·共献爱心”优瑞德端午爱心公益之行圆满成功!

端午飘粽香,浓情暖人心。2023年6月21日上午9:30,端......更多>

这个端午节,来看2023款瑞虎5x诠释对自驾游的顶级理解
这个端午节,来看2023款瑞虎5x诠释对自驾游的顶级理解

端午小长假即将来临,不少朋友打算远离城市喧嚣,来一......更多>

免费!超600家房屋中介门店可为电动自行车应急充电
免费!超600家房屋中介门店可为电动自行车应急充电

记者近日从北京链家获悉,为助力社区降低电动自行车充......更多>

广东各地排查不停歇,拧紧燃气“安全阀”
广东各地排查不停歇,拧紧燃气“安全阀”
燃气安全关系千家万户。宁夏银川市兴庆区富洋烧烤店燃... 更多>
广东各地排查不停歇,拧紧燃气“安全阀”
燃气安全关系千家万户。宁夏银川市兴庆区富洋烧烤店燃... 更多>
陪伴街坊18载 家乐福天河员村店将于6月底关停
“因业务调整原因,广州家乐福员村店将在2023年6月30... 更多>
端午假期第二天广铁发送旅客180万人次
记者从广铁集团了解到,6月23日是端午假期第二日,珠... 更多>
热门:管风琴演绎“仲夏夜之约”,石湾清雅公益音乐会系列(九)举行
6月21日,由广东石湾酒厂集团、陈太吉酒庄、新石湾美... 更多>
环球动态:最高省10万! 速来番禺房地产博览会看房
为激发市场主体活力,助推房地产业平稳健康发展,6月2... 更多>
定了! 这部240集的纪录片拍摄首站选在广东_热点
6月21日,240集大型文献纪录片《人民中医》广东拍摄工... 更多>
天天快资讯丨从化|踔“荔”奋发,一大波重点项目落户美“荔”温泉
6月22日,2023年广州从化荔枝节系列活动——“从此荔... 更多>
“穗城源”首届九龙湖龙舟文化节开幕,36支龙舟队伍展开角逐_世界即时看
6月22日,恰逢中国传统节日端午节,“穗城源”首届九... 更多>
出发“睇龙船”!越秀寺右、二沙举行龙舟“招景”活动
农历五月初五是传统节日端午节,广州越秀寺右、二沙迎... 更多>
2023年广州市斯诺克公开赛落幕
6月21日,由广州市台球协会主办、广州永利桌球俱乐部... 更多>
天天观天下!广东工业大学高水平男子篮球队被授予广东青年五四奖章
6月21日,共青团广东省委员会、广东省青年联合会联合... 更多>
传统民俗粤味浓!591岁“盐步老龙”来到泮塘“探契仔” 当前视点
千年绵延的龙舟文化雕刻在岭南水乡人民的基因里,广州... 更多>