95. 你遇到 Redis 线上连接超时一般如何处理?(一)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 95. 你遇到 Redis 线上连接超时一般如何处理?(一)

95. 你遇到 Redis 线上连接超时一般如何处理?(一)


一封报警邮件,大量服务节点 redis 响应超时。


又来,好烦。


redis 响应变慢,查看日志,发现大量 TimeoutException。


大量TimeoutException,说明当前redis服务节点上已经堆积了大量的连接查询,超出redis服务能力,再次尝试连接的客户端,redis 服务节点直接拒绝,抛出错误。


那到底是什么导致了这种情况的发生呢?


总结起来,我们可以从以下几方面进行关注:


一、redis 服务节点受到外部关联影响

redis服务所在服务器,物理机的资源竞争及网络状况等。同一台服务器上的服务必然面对着服务资源的竞争,CPU,内存,固存等。

1、CPU资源竞争

redis属于CPU密集型服务,对CPU资源依赖尤为紧密,当所在服务器存在其它CPU密集型应用时,必然会影响redis的服务能力,尤其是在其它服务对CPU资源消耗不稳定的情况下。


因此,在实际规划redis这种基础性数据服务时应该注意一下几点:


一般不要和其它类型的服务进行混部。

同类型的redis服务,也应该针对所服务的不同上层应用进行资源隔离。

说到CPU关联性,可能有人会问是否应该对redis服务进行CPU绑定,以降低由CPU上下文切换带来的性能消耗及关联影响?


简单来说,是可以的,这种优化可以针对任何CPU亲和性要求比较高的服务,但是在此处,有一点我们也应该特别注意:我们在 关于redis内存分析,内存优化 中介绍内存时,曾经提到过子进程内存消耗,也就是redis持久化时会fork出子进程进行AOF/RDB持久化任务。


对于开启了持久化配置的redis服务(一般情况下都会开启),假如我们做了CPU亲和性处理,那么redis fork出的子进程则会和父进程共享同一个CPU资源,我们知道,redis持久化进程是一个非常耗资源的过程,这种自竞争必然会引发redis服务的极大不稳定。


2、内存不在内存了

关于redis内存分析,内存优化 开篇就讲过,redis最重要的东西,内存。


内存稳定性是redis提供稳定,低延迟服务的最基本的要求。


然而,我们也知道操作系统有一个 swap 的东西,也就将内存交换到硬盘。假如发生了redis内存被交换到硬盘的情景发生,那么必然,redis服务能力会骤然下降。


swap发现及避免:


1)info memory:

关于redis内存分析,内存优化 中我们也讲过,swap这种情景,此时,查看redis的内存信息,可以观察到碎片率会小于1。这也可以作为监控redis服务稳定性的一个指标。


2)通过redis进程查看。

首先通过 info server 获取进程id:

查看 redis 进程 swap 情况:cat /proc/1686/smaps

确定交换量都为0KB或者4KB。


3)redis服务maxmemory配置。

关于redis内存分析,内存优化 中我们提到过,对redis服务必要的内存上限配置,这是内存隔离的一种必要。需要确定的是所有redis实例的分配内存总额小于总的可用物理内存。


4)系统优化:

另外,在最初的基础服务操作系统安装部署时,也需要做一些必要的前置优化,如关闭swap或配置系统尽量避免使用。


3、网络问题

网络问题,是一个普遍的影响因素。


1)网络资源耗尽

简单来说,就是带宽不够了,整个属于基础资源架构的问题了,对网络资源的预估不足,跨机房,异地部署等都会成为诱因。


2)连接数用完了

一个客户端连接对应着一个TCP连接,一个TCP连接在LINUX系统内对应着一个文件句柄,系统级别连接句柄用完了,也就无法再进行连接了。


查看当前系统限制:ulimit -n


设置:ulimit -n {num}


3)端口TCP backlog队列满了

linux系统对于每个端口使用backlog保存每一个TCP连接。


redis配置:tcp_backlog 默认511

高并发情境下,可以适当调整此配置,但需要注意的是,同时要调整系统相关设置。

系统修改命令:echo {num}>/proc/sys/net/core/somaxconn

查看因为队列溢出导致的连接绝句:netstat -s | grep overflowed


4)网络延迟

网络质量问题,可以使用 redis-cli 进行网络状况的测试:

延迟测试:redis-cli -h {host} -p {port} --latency

采样延迟测试:redis-cli -h {host} -p {port} --latency-history 默认15s一次

图形线上测试结果:redis-cli -h {host} -p {port} --latency-dist


5)网卡软中断

单个网卡队列只能使用单个CPU资源问题。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
NoSQL 网络安全 Redis
用Windows连接Liunx中的redis
用Windows连接Liunx中的redis
32 0
|
3月前
|
监控 NoSQL Linux
Redis突现拒绝连接问题处理总结
Redis突现拒绝连接问题处理总结
|
4月前
|
消息中间件 移动开发 NoSQL
Redis 协议 事务 发布订阅 异步连接
Redis 协议 事务 发布订阅 异步连接
|
1月前
|
NoSQL Java API
Redis官方推荐的Java连接开发工具Jedis
Redis官方推荐的Java连接开发工具Jedis
|
2月前
|
运维 NoSQL 算法
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
【Redis故障排查】「连接失败问题排查和解决」带你深入分析一下Redis阻塞原因以及问题排查方案指南
205 0
|
2月前
|
缓存 运维 NoSQL
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
610 0
|
17天前
|
NoSQL 网络安全 Redis
【docker】部署的redis突然连接不上了
【docker】部署的redis突然连接不上了
18 1
|
1月前
|
NoSQL Redis
Another Redis Desktop Manager 连接Redis(哨兵模式)
Another Redis Desktop Manager 连接Redis(哨兵模式)
26 0
|
1月前
|
NoSQL 安全 网络安全
Redis连接:加速数据访问与保障安全传输的关键
Redis连接:加速数据访问与保障安全传输的关键
|
2月前
|
SQL 运维 NoSQL
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
【Redis 故障排查】「连接失败问题排查和解决」带你总体分析CPU及内存的使用率高问题排查指南及方案
41 0