马文斌
2023-12-12
redis 连接风暴 连接数占满
近期有redis 数据库连不上,起初以为是redis的连接数满了,排查到后面发现问题不简单啊,下面看看具体的排查过程。
密码不对
网络不好,丢包
原来的连接没有释放
程序有bug,一直循环创建连接
连接数已达上限,新连接挤不进去
.....
查redis的目前连接数
127.0.0.1:6379> info clients # Clients connected_clients:9993 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:1 ?
查redis哨兵的连接数
redis-cli -h 192.168.63.114 -a xxxx -p 26579 CLIENT LIST |grep -c addr 9994
redis 默认最大连接数是1w个,那基本达到阈值
config set timeout 900 为了防止连接数不释放,设置timeout=900 秒,但是经过观察,连接数还是一直占满
统计端口的来源ip: ss -tnp | grep 26579 | awk '{print $5}' | awk -F : '{print $1}' | sort | uniq -c | sort -nr ? 统计出 192.168.1.1 9900
统计出192.168.1.1 这个客户端的连接有9900个,居然占了99.9%的连接数,那基本定位是这个ip的客户端有问题了,找开发查这个ip的客户端配置,原来是程序有bug,一直循环创建连接。所以最后的问题点不是网络原因,也不是连接数不够,而是程序无限死循环的创建连接,最终把连接数占满。