redis client连接数过多,大量空闲连接无法释放

redis服务端连接却没有释放,这个问题就是因为redis默认timeout没有做修改,无论连接是否空闲,长期保持连接状态。

  • redis client list 查看连接数
    数正常,
    相关参数解释
    Redis CLIENT LIST命令用于返回所有连接到服务器的客户端信息和统计数据。
    
    返回值
    bulk-string-reply: 一个独特的字符串,格式如下:
    
    每个已连接客户端对应一行(以 LF 分割)
    每行字符串由一系列 属性=值(property=value) 形式的域组成,每个域之间以空格分开。
    下面是各字段的含义::
    	id: 唯一的64位的客户端ID(Redis 2.8.12加入)。
    	addr: 客户端的地址和端口
    	fd: 套接字所使用的文件描述符
    	age: 以秒计算的已连接时长
    	idle: 以秒计算的空闲时长
    	flags: 客户端 flag
    	db: 该客户端正在使用的数据库 ID
    	sub: 已订阅频道的数量
    	psub: 已订阅模式的数量
    	multi: 在事务中被执行的命令数量
    	qbuf: 查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区)
    	qbuf-free: 查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间)
    	obl: 输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区)
    	oll: 输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里)
    	omem: 输出缓冲区和输出列表占用的内存总量
    	events: 文件描述符事件
    	cmd: 最近一次执行的命令
    
    参考官网

优化方案

  1. 通过ip排查对应的service服务,查看是否可以进行优化。

  2. config get timeout
    命令查看空闲超时时间
    0 默认不开启

  3. config set timeout 60

    建议为0,有用分布式锁的情况下,看业务场景

    配置默认空闲超时时间为60s

  4. config rewrit 保存
    可在redis.conf 配置文件中添加重启生效。


  • 检查配置步骤

    #1. 登陆redis集群
    redis-cli -h 127.0.0.1 -p 1000 -c10.10.2.19:1000> auth 123456
    #2. 查看redis的配置timeout(当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能)
    config get timeout 
    #3. 配置超时
    config set timeout 0  # 默认
    #4. 查看连接状态
    lsof -i:1000
    netstat -antp | grep 1000
    # 如果是集群模式,那么每个节点都得需要修改。
    
  • redis连接数与最大连接数
    方法1. 在redis-cli命令行使用:info clients可以查看当前的redis连接数

    127.0.0.1:6379> info clients
    #Clients
    connected_clients:621
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    127.0.0.1:6379>
    
      方法2:config get maxclients 可以查询redis允许的最大连接数
    
    127.0.0.1:6379> CONFIG GET maxclients
        ##1) "maxclients"
        ##2) "10000"
    127.0.0.1:6379>
    
  • 设置、修改

    1. 在2.6之后版本,可以修改最大连接数配置,默认10000,可以在redis.conf配置文件中修改
      maxclients 10000
    2. config set maxclients num 可以设置redis允许的最大连接数
      127.0.0.1:6379> CONFIG set maxclients 10
      OK
      127.0.0.1:6379>
      
    3. 启动redis.service服务时加参数–maxclients 100000来设置最大连接数限制
      redis-server --maxclients 100000 -f /etc/redis.conf
      
  • redis-cli命令控制行中获取客户端信息命令

    CLIENT LIST获取客户端列表
    CLIENT SETNAME    设置当前连接点redis的名称
    CLIENT GETNAME    查看当前连接的名称
    CLIENT KILL ip:port    杀死指定连接
    
    CLIENT LIST
        ##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
    CLIENT SETNAME js
        ##OK
    CLIENT LIST
        ##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
    CLIENT GETNAME
        ##"js"
    CLIENT KILL id 3
        ##(integer) 0
    

# 查看redis连接数
netstat -nap|grep redis |wc -l 
# 查看redis信息连接
redis -info
# redis 监控
redis -monitor
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讓丄帝愛伱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值