我用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经常报错:
or
其实发生这个错误的时候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连接,发现如下问题:
有些连接的Recv_Q和Send_Q不能很快的清空,redis服务的client list列表如下:
如果谁在使用redis的时候出现过同类的问题,如果解决?
redis服务端和Jedis客户端如何配置才合适?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。