干货 | 记一个真实的排障案例:携程Redis偶发连接失败案例分析(转载)

问题描述

生产环境有一个Redis会偶尔发生连接失败的报错。报错的时间点,客户端IP并没有特别明显的规律。以下是客户端报错信息。过一会儿,报错会自动恢复。

CRedis.Client.RExceptions.ExcuteCommandException:Unable to Connect redis server: ---> CRedis.Third.Redis.RedisException: Unable to Connect redis server: CRedis.Third.Redis.RedisNativeClient.CreateConnectionError()
CRedis.Third.Redis.RedisNativeClient.SendExpectData(Byte[][]cmdWithBinaryArgs)
CRedis.Client.Entities.RedisServer.<>c__DisplayClassd`1.<Get>b__c(RedisClientclien)
CRedis.Client.Logic.ClientPool.ExcuteAction[T](Func`2 action,String methodName)
CRedis.Client.Logic.ClientPool.Excute[T](Func`2 action, StringmethodName)

从报错的信息来看,应该是连接不上Redis所致。Redis的版本是2.8.19。虽然版本有点老,但基本运行稳定。
线上环境只有这个集群有偶尔报错。这个集群的一个比较明显的特征是客户端服务器比较多,有上百台。

问题原因:

Jemalloc每次回收都会判断所有实际应该清理的chunck并对清理做count,这个操作对于高响应要求的系统是很奢侈的,所以我们考虑通过升级jemalloc的版本来优化purge的性能。

解决方案:

根据上面的分析,我们尝试通过升级jemalloc版本,实际操作为升级Redis版本来解决。将Redis的版本升级到4.0.9之后观察,线上客户端连接超时这个棘手的问题得到了解决。

详情请看
https://mp.weixin.qq.com/s/VvAFpLmwg0bJZrnLUIv18A

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值