redis未设置idle超时时间导致连接过多

今天ELK收集日志的时候,发现收集失败,查找各方面原因,最后在redis日志里面发现报错:
[2489] 02 Jun 10:43:42 # Error allocating resoures for the client

错误是无法为客户端分配资源,查看redis连接数:
# redis-cli info | grep connected        
connected_clients:5036
connected_slaves:0

客户端的连接竟然有达到5000多

查看客户端连接情况:
redis 127.0.0.1:6379> client list 
addr=10.247.64.115:52834 fd=5 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=127.0.0.1:38484 fd=7 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=blpop 
addr=10.105.1.2:53125 fd=8 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=10.105.1.3:32639 fd=9 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=10.105.1.4:57134 fd=10 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=10.105.1.5:53126 fd=11 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=10.105.1.7:8887 fd=12 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush

每个字段含义如下:
addr:客户端的地址和端口 
fd:套接字所使用的文件描述符 
idle:以秒计算的空闲时长 
flags:客户端 flag 
db:该客户端正在使用的数据库 ID 
sub:已订阅频道的数量 
psub:已订阅模式的数量 
multi:在事务中被执行的命令数量 
qbuf:查询缓冲区的长度(字节为单位, 0 表示没有分配查询缓冲区) 
qbuf-free:查询缓冲区剩余空间的长度(字节为单位, 0 表示没有剩余空间) 
obl:输出缓冲区的长度(字节为单位, 0 表示没有分配输出缓冲区) 
oll:输出列表包含的对象数量(当输出缓冲区没有剩余空间时,命令回复会以字符串对象的形式被入队到这个队列里) 
omem:输出缓冲区和输出列表占用的内存总量 
events:文件描述符事件 
cmd:最近一次执行的命令

发现客户端的idle空闲时长太长,连接池维持了太多的连接,需要将不用的连接及时释放掉:
redis 127.0.0.1:6379> CONFIG SET timeout 30
OK

再次查看连接:
# redis-cli info | grep connected 
connected_clients:1137
connected_slaves:0

连接数大量下降

查看连接的具体情况
redis 127.0.0.1:6379> client list 
addr=127.0.0.1:38484 fd=7 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=blpop 
addr=10.105.1.150:39742 fd=269 idle=29 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush 
addr=10.105.1.226:53291 fd=5 idle=31 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush

idle的时间已经限制在30秒了

原文地址:https://www.cnblogs.com/cfas/p/9348911.html

时间: 2024-10-01 14:16:42

redis未设置idle超时时间导致连接过多的相关文章

WebSphere设置会话超时时间

WebSphere Application Server的会话超时时间可以在三个层面进行设置,分别为:应用程序服务器级别.应用程序级别和代码层面进行设置. 设置方式:应用程序级别级别和应用级别可以通过WAS的管理控制台进行设置,而代码层面则需要在Web应用的部署描述符文件中手动设置超时时间: 作用范围:应用程序服务器级别设置的超时时间作用于为整个应用程序服务器,部署在该应用程序服务器中的应用均采用此设置:应用程序级别和代码级别的设置只作用于当前应用程序: 优先级别:应用程序服务器级别 < 应用程

iOS开发中如何设置请求超时时间

1 NSString *baseUrl; 2 NSURL *url = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 3 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInter

httpclient: 设置请求的超时时间,连接超时时间等

public static void main(String[] args) throws Exception{ //创建httpclient CloseableHttpClient httpClient = HttpClients.createDefault(); //创建http get HttpGet httpGet = new HttpGet("http://www.taotao.com/"); //构建超时等配置信息 RequestConfig config = Reques

Shiro 设置session超时时间

通过api:Shiro的Session接口有一个setTimeout()方法 //登录后,可以用如下方式取得session SecurityUtils.getSubject().getSession().setTimeout(30000); 查看Shiro的api文档, setTimeout void setTimeout(long maxIdleTimeInMillis) throws InvalidSessionExceptionSets the time in milliseconds t

HTTP请求超时时间导致的请求长时间等待

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 发送http请求需要添加超时时间,否则大量的请求会导致被请求方,积累好多待关闭请求,导致后续请求长时间等待,无法释放 参考:https://blog.csdn.net/shootyou/article/details/6615051 原文地址:https://www.cnblogs.com/wanhua-wu/p/10618733.html

vue 设置请求超时时间处理

Vue.http.post('http://114.214.164.77:2222/crptorgraphy',{msg:JSON.stringify(req)},{emulateJSON:true,_timeout:3000, onTimeout: (request) => { //超出时间你要处理的逻辑 }}).then((response) => { }, (error) => { }); //拦截器设置全局请求token Vue.http.interceptors.push((r

VNC未设置display参数错误导致Oracle安装报错

在平时远程安装Oracle使用多都是使用VNC远程桌面来安装,当然就是怕安装出错,但是最近在安装一台服务器的Oracle时,就在安装执行安装脚本时就报错了,看了下大致的报错内容大致是说DISPLAY 尚未设置,需要设置后才能继续安装,在使用时VNC远程时是安装使用tigervnc(可以参看:http://jim123.blog.51cto.com/4763600/1911577)而在安装前有使用过xhost +,后来查了下是屏幕的系统变量参数没有生效,可以在图形界面下的终端中查看下DISPLAY

使用cxf创建webservice 出现timeOut的问题,设置spring超时时间

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/

java测试网络连接是否成功并设置超时时间

/** * 获取RMI接口状态 * * @return "0":服务正常,"1": 连接报错,"2":连接超时 */ @Override public String getRMIJkzt() { final ExecutorService es = Executors.newFixedThreadPool(1); Callable<String> callable = new Callable<String>() {//使