连接池无法获取到连接或获取连接超时
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
对于这类问题的原因有几类,可以根据以下一一进行排查

连接配置错误

Jedis连接池配置不可用,redis.host或redis.ip或redis.password 配置有误,手动检查配置是否都配置正确。

本地连接池连接数达到最大

连接池中有配置最大连接数maxTotal,本地连接使用达到最大连接数maxTotal。在访问客户端上通过netstat -an | grep 6379 | grep EST | wc -l 查看客户端链接数目,如果接近maxTotal, 说明本地连接池资源已经有过耗尽或者正在耗尽。

服务端连接数达到最大

服务端连接数已经超过最大值maxclients,单机的maxclients默认是10000,可以通过redis-cli登录服务端,使用info 命令查看当前连接数。

$redis-cli -h 10.1**.2.*0 -p 6379
10.1**.2.*0:6379> info clients
# Clients
connected_clients:1004
client_longest_output_list:0
client_biggest_input_buf:1
blocked_clients:0
10.1**.2.*0:6379>

当服务端连接数达到最大,可以通过命令client list,列出连接数,查看age=130222 idle=130222,这两值表示连接存活的时间和已经空闲的时间。
假如有IP的连接数过大,有可能是客户端连接使用不规范导致连接泄露。

网络问题

可以通过客户端工具redis-cli -h ${IP} -p ${port} -a ${pwd},连接成功后,简单执行set mykey-i i, del mykey-i 命令,测试redis是否可用。

或者telnet host 6379进行连接,执行多次简单set del命令测试。

redis连接代码检查

获取JedisPool连接池中的jedis,使用jedis操作redis,每次getResource之后需要调用returnResource或者close进行归还,可以查看代码在使用完jedis之后是否returnResource,如果没有归还,则非常有可能产生连接泄露。

检查是否发生nf_conntrack丢包

通过dmesg检查客户端是否有异常

nf_conntrack: table full, dropping packet

如果发生nf_conntract丢包可以通过修改设置sysctl -w net.netfilter.nf_conntrack_max=120000

检查是否TIME_WAIT问题

通过ss -s 查看time wait链接是否过多

[root@localhost ~]# ss -s
Total: 314 (kernel 4877)
TCP:   32 (estab 3, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*   4877      -         -
RAW   1         0         1
UDP   2         1         1
TCP   31        13        18
INET   34        14        20
FRAG   0         0         0

如果TIME_WAIT过多可以修改以下参数
sysctl -w net.ipv4.tcp_max_tw_buckets=180000
sysctl -w net.ipv4.tcp_tw_recycle=1

linux文件系统句柄数过小

设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。当你

无法设置进程文件句柄限制时,redis会设置为当前的文件句柄限制值减去32,因为redis会为自身内部处理逻辑留一些句柄出来。如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应。

抓包分析

如果按照上面排查之后还有问题可以通过抓包进行分析。

抓包命令为sudo tcpdump -i eth0 tcp and port 6379 -n -nn -s 74 -w redis.cap。

---------------------
作者:常乐_smile
来源:CSDN
原文:https://blog.csdn.net/li396864285/article/details/78623950
版权声明:本文为博主原创文章,转载请附上博文链接!

redis连接超时问题排查的更多相关文章

  1. 【Redis连接超时】记录线上RedisConnectionFailureException异常排查过程

    项目架构: 部分组件如下: SpringCloudAlibaba(Nacos+Gateway+OpenFeign)+SpringBoot2.x+Redis 问题背景: 最近由于用户量增大,在高峰时期, ...

  2. 记一次redis读取超时的排查过程(SADD惹的祸)

    问题背景 在业务使用redis过程中,出现了read timeout 的异常. 问题排查 直接原因 运维查询redis慢查询日志,发现在异常时间节点,有redis慢查询日志,执行sadd 命令花费了1 ...

  3. redis 连接超时。。

    在虚拟机安装后.在项目中加入redis 想测试一下功能 然后在物理机死活连不上. 1.用物理机ping 虚拟机的IP 通.... 2.然后.把redis.conf 里面bind 0.0.0.0 依然没 ...

  4. QPS过万,redis大量连接超时怎么解决?

    7月2号10点后,刚好某个负责的服务发生大量的redis连接超时的异常(redis.clients.jedis.exceptions.JedisConnectionException),由于本身的数据 ...

  5. java连接redis5.0单机版报连接超时错误

    使用java代码测试redis5.0单机版时,报redis连接超时异常,而linux上的redis能正常访问: redis.clients.jedis.exceptions.JedisConnecti ...

  6. 记一次Docker中Redis连接暴增的问题排查

    周六生产服务器出现redis服务器不可用状态,错误信息为: 状态不可用,等待后台检查程序恢复方可使用.Unexpected end of stream; expected type 'Status' ...

  7. redis远程连接超时

     今天在用jedis连接远程的redis时,抛出连接超时异常:connect timed out. 详细信息例如以下: Exception in thread "main" r ...

  8. 双十一问题:在洪峰数据来临的瞬间,redis出现连接超时异常

    如图所示,在大数据量来袭时,部署服务的机器中存在一台机器突然出现该报错,并且一直持续下去,直到洪峰数据结束也未恢复,重启机器后该问题解决 原因分析: 在请求redis过多时,因为未及时的释放掉redi ...

  9. 今天,你遇到redis线上连接超时了吗?

    一封报警邮件,大量服务节点 redis 响应超时. 又来,好烦. redis 响应变慢,查看日志,发现大量 TimeoutException. 大量TimeoutException,说明当前redis ...

随机推荐

  1. ubuntu 安装 2.10.x版本的scala

    Ubuntu 14.04.1 LTS上默认的scala版本是2.9的,而最新版本的spark-1.3需要最低版本的scala版本为2.10.x,先使用apt-get remove scala将机器上的 ...

  2. Django 时间与时区设置问题

    django 时间与时区设置问题 在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Dja ...

  3. [Contiki系列论文之2]WSN的自适应通信架构

    说明:本系列文章翻译自Contiki之父Adam Dunkels经典论文,版权归原作者全部. Contiki是由Adam Dunkels及其团队开发的系统.研读其论文是对深入理解Contiki系统的最 ...

  4. Android: TextView 及其子类通过代码和 XML 设置字体大小的存在差异的分析

    原因: 在代码中通过 setTextSize(float size) 设置,使用的是 sp 为默认单位. 而 XML 中使用了 px,所以需要使用先把做好 sp 和 px 的转换工作. 最近在做 ap ...

  5. android studio - 右键没有“New C++ Class 选项” 或 “Cannot find declaration to go to”的问题

    今天在android studio的cpp文件夹上右键,发现竟然没有了New C++ Class“的选项,如下图所示: 上图是正常情况. 下图是非正常情况. 解决方案 检查”File“-"S ...

  6. Mac终端中主机名与用户名的修改

    Mac终端的主机名称+用户名全部显示出来的话会可能显得特别长,影响整体美观,可以切换至root用户后 修改.bashrc文件进行格式化. 1. 终端中切换root用户 su - root 2. 修改/ ...

  7. Lua语法基础(2)--基本语法、函数

    上一篇编辑编辑着,发现,缩进出了问题.作为一个不是强迫症的人,实在是忍受不了同一级内容不同缩进方式的槽点,于是重开一篇吧.(万幸,这样的文章也只有我自己看.) 第四 基本语法 赋值语句,Lua可以对多 ...

  8. zookeeper的原理讲解

    留着以后看:http://blog.csdn.net/u010311445/article/category/1677839

  9. 什么是lib文件,lib和dll的关系如何

    (1)lib是编译时需要的,dll是运行时需要的. 如果要完成源代码的编译,有lib就够了. 如果也使动态连接的程序运行起来,有dll就够了. 在开发和调试阶段,当然最好都有. (2)一般的动态库程序 ...

  10. vue实现点击区域外部的区域,关闭该区域

    var _this = this; document.addEventListener('click',function(e){ console.log(_this.$refs.configforms ...