博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解Jedis连接池报错处理
阅读量:5933 次
发布时间:2019-06-19

本文共 1417 字,大约阅读时间需要 4 分钟。

在使用Jedis连接池模式下,比较常见的报错如下:

redis.clients.jedis.exceptions.JedisConnectionException:Could not get a resource from the pool

已华为云的分布式缓存服务(Redis)为例,首先确认实例是正常运行中状态,然后按以下步骤进行排查。

 

网络

 

1.        核对IP地址配置

检查jedis客户端配置的ip地址是否与缓存实例配置的子网地址一致,如果从公网访问,则检查是否与缓存实例绑定的弹性ip地址一致,不一致则修改一致后重试。

2.        测试网络

在客户端使用ping和Telnet小工具测试网络。

如果ping不通:

−          VPC内访问时,要求客户端与缓存实例的VPC相同,安全组相同或者缓存实例的安全组放开了6379端口访问。

−          公网访问时,要求缓存实例安全组放开36379端口访问。

−          如果IP地址可以ping通,telnet对应的端口不通,则尝试重启实例,如重启后仍未恢复,请联系华为云技术支持。

 

检查连接数是否超限

 

查看已建立的网络连接数是否超过JedisPool 配置的上限。如果连接数接近配置的上限值,则建议重启服务观察。如果明显没有接近,排除连接数超限可能。

Unix/Linux系统使用:

netstat-an | grep 6379 | grep ESTABLISHED | wc -l

Windows系统使用:

netstat-an | find "6379" | find "ESTABLISHED" /C

 

检查JedisPool连接池代码

 

如果连接数接近配置的上限,请分析是业务并发原因,或是没有正确使用JedisPool所致。

对于JedisPool连接池的操作,每次调用jedisPool.getResource()方法之后,需要调用jedisPool.returnResource()或者jedis.close()进行释放,优先使用close()方法。

 

客户端TIME_WAIT是否过多

 

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

如果TIME_WAIT过多,可以调整内核参数(/etc/sysctl.conf):

##当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击 

net.ipv4.tcp_syncookies = 1 
##允许将TIME-WAITsockets重新用于新的TCP连接 
net.ipv4.tcp_tw_reuse = 1 
##开启TCP连接中TIME-WAIT sockets的快速回收 
net.ipv4.tcp_tw_recycle = 1 
##修改系統默认的TIMEOUT时间 
net.ipv4.tcp_fin_timeout = 30

调整后重启生效:/sbin/sysctl -p

 

无法解决问题

 

如果按照以上原因排查之后还有问题,可以通过抓包并将异常时间点、异常信息以及抓包文件发送给华为云技术支持协助分析。

抓包可使用tcpdump工具,命令如下:

tcpdump-i eth0 tcp and port 6379 -n -nn -s 74 -w dump.pcap

公网访问时请将端口改成36379。

网卡名请改成实际的网卡名称。

转载于:https://www.cnblogs.com/husterindg/p/9185872.html

你可能感兴趣的文章
Spring Controller 获取请求参数的几种方法
查看>>
项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库...
查看>>
redis常用数据类型介绍
查看>>
第一节 走进AS3.0游戏编程
查看>>
mac 的 node 多版本管理工具 nvm安装
查看>>
Apk反编译助手
查看>>
命令行方式启用Lync状态复制
查看>>
JavaScript注意事项
查看>>
利用 XPath-jQuery 集锦手册在 XPath 和 jQuery 之间做选择
查看>>
模板分页封装
查看>>
Datatables中文API——回调函数
查看>>
windows 10 企业版 桌面文件、图标突然丢失的解决方法
查看>>
Python Web开发
查看>>
分布式消息队列RocketMQ与Kafka架构上的巨大差异之2 -- CommitLog与ConsumeQueue
查看>>
我的友情链接
查看>>
排除Exchange Server自动查询的AD服务器
查看>>
linux内核优化(转)
查看>>
Index column size too large. The maximum column size is 767 bytes
查看>>
rocketmq3.26研究之一存储层
查看>>
mysql数据库操作
查看>>