我在我的应用程序中使用了redis pub/sub机制,并想做一个基准测试。我有一台I-7机器,内存为32 GB,ulimit设置为1024。Redis服务器具有相同的配置,只是ulimit设置为65535。在没有redis抱怨MAXClient到达异常的情况下,我可以同时建立多少个连接。我试着用连接池等调优连接,但同时请求的数量似乎没有超过25K个请求。
谢谢\
发布于 2015-09-10 23:29:45
最大客户端数量
在Redis2.4中,对同时处理的最大客户端数量有硬编码限制。
在Redis2.6中,这个限制是动态的:默认情况下设置为10000个客户端,除非Redis.conf中的maxmemory指令另有说明。
但是,Redis会检查内核,我们可以打开的最大文件描述符数量是多少(检查软限制),如果限制小于我们想要处理的最大客户端数量,加上32 (即Redis为内部使用保留的文件描述符数量),则Redis会修改最大客户端数量,以匹配当前操作系统限制下我们真正能够处理的客户端数量。
当无法满足配置的最大客户端数量时,将在启动时记录此情况,如下例所示:
$ ./redis-server --maxclient 100000
41422 23 Jan 11:28:33.179 #无法将最大文件数限制设置为100032 (无效参数),将最大客户端配置设置为10112。
在配置Redis以处理特定数量的客户端时,最好确保操作系统对每个进程的最大文件描述符数量的限制也相应地进行了设置。
在Linux下,可以在当前会话中设置这些限制,也可以使用以下命令将其设置为系统范围的设置:
fs.file-max=100000
发布于 2017-10-06 18:59:18
我对发布/订阅连接一无所知,但这里解释了我所做的一切,我认为它可能会对您有所帮助。
我在redis.conf文件中用27000连接设置了"maxclient“属性。
然后,我使用-c 27000意味着27000并行连接来运行redis提供的基准测试工具。但这不会直接起作用,因为在ubuntu中,默认的ulimit -Sn是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台单独的计算机运行相同的基准测试util,每台计算机有29000个并行客户端,它可以工作并被执行。
奇怪的是,我的redis.conf设置了maxclient 27000,但我仍然可以连接87000客户端。
发布于 2017-11-16 06:55:06
适用于我的解决方案:已编辑/etc/systemd/system/redis.service将以下行添加到Service部分
LimitNOFILE=110000https://stackoverflow.com/questions/32486500
复制相似问题