开发者社区> 问答> 正文

Jedis异常处理方式的问题

我用Jedis的SharedJedisPool,配置为 MaxActive=500,MaxIdle=100,MaxWait=2000,testOnBorrow=true。redis服务器是Linux CentOS 6.0 内存98G,redis本身所占内存1.9G,Maxclients=655328,Linux的fs.file-max=9876450。服务器机构是 一主两从,主实例只负责写和持久化,两个从实例负责提供客户端读操作。主从在不同的机器,两个从实例在同一台机器上,主从实例在同一局域网。客户端其实也 是服务端程序,为40个Tomcat的实例,每20个访问一个从实例,客户端和redis服务不在同一个机器但是在同一个局域网。当有大量并发请求 redis客户端服务时,Jedis经常报错:
1
or
2
其实发生这个错误的时候redis实例的connected_clients不足10000,大概就4000左右。使用redis-cli也连不上redis服务,报错:
Could not connect to Redis at 127.0.0.1:6381: Connection timed out
使用netstat -anlpt|grep 127.0.0.1:6381查看连接到redis服务的tcp连接,发现如下问题:
3
有些连接的Recv_Q和Send_Q不能很快的清空,redis服务的client list列表如下:
4
5
如果谁在使用redis的时候出现过同类的问题,如果解决?
redis服务端和Jedis客户端如何配置才合适?

展开
收起
落地花开啦 2016-02-25 15:27:04 3148 0
2 条回答
写回答
取消 提交回答
  • 如果是connection time out的话这时候需要分析下服务端的问题还是客户端的问题,可能是因为服务端tcp backlog满掉了导致syn包drop掉,也可能是本地到服务端的网络出现问题了

    2019-07-17 18:47:35
    赞同 展开评论 打赏
  • 喜欢技术,喜欢努力的人

    没有正确的释放jedis resource 造成的web内存泄露和redis线程阻塞

    2019-07-17 18:47:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载