huawei Cloud redis 连接超时问题排查记录
2023-06-13 09:15:37 时间
在一个风和日丽的上午,日志告警群里的机器人开始告警,显示redis 连接超时;第一反应是不是redis 扛不住了。然后登陆到华为云控制台上查看redis 监控;
redis 超时肯定就是网络层面的问题,第一反应先看一下是不是连接数满了;
然后看到活跃的客户端数量是2000不到,然后里面有一个新建连接数。发现新建连接数为562788(五十万),感觉这个监控指标有点异常,因为我们redis当前redis 实力的最大TCP连接数是(10000-50000)然后我们reids 实力配置的 maxClient 参数是10000,按照道理来说新建连接数应该最大才能有10000,超过10000 就应该疯狂报错了,但是告警没有那么频繁,所以我感觉华为云的这个监控有啥问题,于是提工单来问。新建连接数 这个监控数据到底是怎么取的;得到的答案是: 新建连接数:这是60s 以内的值,真正当前这个时间点新建连接数应该是562788/60=9,379.8
所以应该是连接数超过最大值导致的连接redis 超时;
那么问题来了。 我问了所有的开发都说redis 使用的是长连接。如果真的是如他们所说那就真是活见鬼了。于是开始找证据,想法就是在同一时间在所有连接redis 的机器获取当前的TCP连接,然后看看看是从那个服务发起的连接redis;
在所有的机器上获取当前的TCP 连接状态,然后复制到指定的机器上进行分析
# cat /etc/ansible/mon.yaml
- hosts: k8s
gather_facts: True
tasks:
- name: Gets the current connection status
shell: conntrack -L >> {{ ansible_nodename }}.txt //获取当前机器的网络链接状态
args:
chdir: /root/
- name: Reverse fetch file
fetch:
src: "/root/{{ ansible_nodename }}.txt"
dest: /tmp/zsf/
flat: true
- ansible_nodename 主机名
然后执行ansible 命令
ansible-playbook /etc/ansible/mon.yaml
然后进去到/tmp/zsf 目录下分析数据
awk '$0~/dport=6379/{sum[$5]++}END{for(i in sum )print sum[i],i}' *| sort -n
然后就能看到每个IP地址链接redis的数量了,之后你就只需要确认这个写ip地址属于那个服务的就行了
kubectl get pods -o wide | grep $IP
找到对应的负责开发,去排查代码。 发现确实redis 连接池没生效,导致的这个问题。到此问题得以解决;
相关文章
- 优点:利用 Redis 提高效率(redis优点)
- 轻松实现Redis自动启动(redis自动启动)
- 快速启动及关闭Redis服务(redis启动关闭)
- 如何跨距离连接Redis服务器(怎么远程链接redis)
- 安全的Redis连接使用密码保护您的数据(带密码的redis连接)
- 拥抱高性能直接连接Redis集群(直连redis集群)
- 深入了解如何查看Redis当前连接数(查看redis有多少连接)
- 构建数据未来使用Redis连接云数据库(云数据库redis连接)
- 赢取成功用win连接Redis(win 连接redis)
- Rust构建Redis连接应用(rust 连接redis)
- 安卓前端的Redis优势提升(安卓前端redis)
- 心灰意冷命令行无法连接Redis服务器(命令行连接不上redis)
- Redis的rst数据包格式存储技术简介(rst包 redis)
- 向客户端响应Redis优雅处理每次请求客户端响应(redis需要每次连接)
- 使用Redis集群程序快速实现连接(redis集群程序连接)
- 实现Redis集群域名间高效连接(redis集群域名连接)
- 重新整合从Redis集群切换到单机版(redis集群切回单机版)
- 深度探索Redis远程配置连接(redis 配置远程链接)
- 探究Redis连接的神奇世界(redis连接过程)
- 使用Redis时如何解决连接缓慢问题(redis连接缓慢)