2015-09-09 47 views
2

我用我的应用程序Redis的发布/订阅机制,并希望做一个基准测试。我有一台32 GB内存的I-7机器,ulimit设置为1024.除了ulimit设置为65535之外,Redis服务器具有相同的配置。没有redis抱怨MAXClient的同时连接数量达到了异常。我尝试调整与连接池等连接,但同时请求的数量似乎不超过25K的请求。Redis的客户MAXLIMIT

感谢\

+0

请问我的回答可以帮助您?如果不是,那么请评论,否则,如果你可以接受的答案是真棒:) –

+1

它部分帮助。谢谢。但没有解决我的问题。 – user3364247

回答

2

From REDIS Documentation

客户

的最大数量的Redis 2.4有关于有可能同时处理的最大客户端数量的硬编码限制。

在Redis的2.6这个限制是动态的:默认设置为10000级的客户,除非在Redis.conf的maxmemory指令另有说明。

然而,Redis会检查内核是什么,我们可以打开的文件描述符的最大数量(检查软限制),如果限制小于我们要处理的最大客户端数量,则为, 32(这是Redis为内部使用而保留的文件描述符的数量),那么Redis将修改最大客户端数量,以匹配我们在当前操作系统限制下真正能够处理的客户端数量。

当不能兑现最大客户端的配置的数目,条件是在启动时记录为在下面的例子:

$ ./redis-server --maxclients 100000

[41422] 23 Jan 11:28:33.179 # Unable to set the max number of files limit to 100032 (Invalid argument), setting the max clients configuration to 10112. 

当配置Redis以处理特定数量的客户端时,确保操作系统限制为每个进程的最大文件描述符数量也是相应设置的一个好主意。

在Linux下,这些限制都可以在当前的会话,并以用下面的命令全系统的设定进行设置:

  • 的ulimit -Sn 100000#如果硬性限制是足够大这只会工作。

  • 的sysctl -w fs.file-MAX = 100000

0

我没有约的pub/sub连接的想法,但我做了什么,这里解释,我认为它可以帮助您。

我设置在redis.conf文件“maxclient的”财产与27000连接设置。

然后我运行通过与redis的-c 27000 27000装置并联连接所提供的基准的效用。 但是这不会直接作为ulimit -Sn在默认情况下在Ubuntu中是1024。所以我改变-Sn和-Hn与65535

Redis的有客户端服务器架构,使我们不能从一台计算机太多的客户端连接。因此,我们需要重用连接,并执行以下命令:sudo echo 1>/proc/sys/net/ipv4/tcp_tw_reuse

然后,我可以使用-c 29000连接运行benchmark util。再后,我没能UTIL与多个客户端执行这一点,但,但我得到的

在127.0.0.1:7000无法连接到Redis的错误:无法分配请求的地址

仍我没有达到最大连接数,所以我使用3台独立的计算机运行相同的基准测试工具,每台计算机都有29000个并行客户端,并且它能够正常工作并得到执行

奇怪的是我的redis.conf有maxclient 27000集,我仍然可以连接87000客户端。

0

为我工作的解决方案: 编辑/etc/systemd/system/redis.service 添加下面一行到[服务]部分

LimitNOFILE=110000