暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

实例分享:Redis连接数过多问题分析

IT那活儿 2023-11-01
1028
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!



问题背景



接收到监控推送的告警,redis集群某节点连接数偏高,触发告警阈值,但该项目明显没有大流量访问,最近也没有更新程序,虽然对生产暂时不会产生影响,但隐患毕竟是隐患,需排查。




排查过程



2.1 排查一下hotkey

redis-cli -p 端口 -a ******* --hotkeys
命令不可用,redis-server的maxmemory-policy参数设置为LFU。而生产的淘汰策略是volatile-lru。
cat redis.conf |grep polioy
maxmemory-policy volatile-lru

2.2 查看连接数
redis-cli -p 端口 -a XXXXXX info |grep connected

是客户端的连接,集群前面有N个predixy代理,顺便找某个代理节点看下有百来个连接:
netstat -anlp|grep 7006 |wc -l
2.3 查看具体的客户端连接信息
client list

  • addr:客户端的地址和端口;
  • fd:套接字所使用的文件描述符;
  • age:以秒计算的已连接时长;
  • idle:以秒计算的空闲时长;
  • flags:客户端;
  • flagdb:该客户端正在使用的数据库;
  • IDsub:已订阅频道的数量;
  • psub:已订阅模式的数量;
  • multi:在事务中被执行的命令数量;
  • qbuf:查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区);
  • qbuf-free:查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间);
  • obl:输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区);
  • oll:输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里);
  • omem:输出缓冲区和输出列表占用的内存总量;
  • events:文件描述符事件;
  • cmd:最近一次执行的命令。
发现客户端的idle空闲时长太长,连接池维持了太多的连接

问题找到了。很简单,配置一下过timeout时间就好了。




优化方案



3.1 查询默认连接时间

config get timeout

3.2 配置过期时间,设置个300秒
CONFIG set timeout 300


END


本文作者:张志彪(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论