STI DT-S11F1S0

Redis db连接超时

 

问题描述:

现象是redis db访问出现超时。

问题分析:

网络流量出现瓶颈,访问变慢。
 

点击(此处)折叠或打开

  1. [machine1 ~]$ ping 192.168.10.66
  2. PING 192.168.10.66 (192.168.10.66) 56(84) bytes of data.
  3. 64 bytes from 192.168.10.66: icmp_seq=1 ttl=64 time=17.7 ms
  4. 64 bytes from 192.168.10.66: icmp_seq=2 ttl=64 time=17.2 ms
  5. Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
  6.   Queueing strategy: fifo
  7.   Output queue: 0/40 (size/max)
  8.   5 minute input rate 874639000 bits/sec, 85931 packets/sec –网络流量每秒800m bit
  9.   5 minute output rate 47017000 bits/sec, 75274 packets/sec
  10.      96257027404 packets input, 21537684106526 bytes, 0 no buffer
  11.      Received 70287596 broadcasts (69442689 multicasts)

 

主机的网卡流量也达到了瓶颈。

redis主机的某些实例内存也开始报警,超过90%。

停止中间件应用后,发现问题还是没有解决,网络流量依旧很高。

将redis db切换到备机后,系统恢复,网络流量下降。redis db从库的内存使用率很低。

发生问题时当时主库的内存最高是14g,但是从库的内存才1.9g。那主库的内存占用是从哪里来的呢?

根据网络同事的反馈,网络请求的大小大概也就几十个字节,但是输出的大小每次达到了几M。

Redis输出缓冲区可能占用大量的内存空间,这和oracle的pga内存非常类似,每个oracle会话会独立分配一个内存区域。那么继续看看本案例是否也是输出缓冲区内存占用过多。查看zabbix相关指标,发现client_longest_output_list的确有增加。应该是输出缓冲区占用内存较大,也就是有大量的数据

从Redis服务器向某些客户端输出。


查看当时的日志,有omem比较大的情况。

 

点击(此处)折叠或打开

  1. id=411550 addr=172.24.1.30:34542 fd=280 name= age=2 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=9
  2. omem=237928 events=rw cmd=lrange

 

后续从slowlog中也发现有返回数据较多的操作。
 

点击(此处)折叠或打开

  1. [machine1 ~]$redis-cli -p 6500 slowlog get 10
  2. 1) 1) (integer) 2245
  3.     2) (integer) 1460002216
  4.     3) (integer) 23236
  5.     4) 1) "SMEMBERS"
  6.        2) "prdkey1"

 

 

一次获取9075多个元素。

 

点击(此处)折叠或打开

  1. 127.0.0.1:6410> scard prdkey1
  2. (integer) 9075

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值