redis的容量要求是什么,以支持一个消费群体中的5万个消费者并行地消费和处理消息?正在寻找针对相同场景的基础设施测试,并且需要了解注意事项。
8aqjt8rx1#
免责声明:我在一家使用redis的公司工作过,该公司的规模有点大(可能比你的情况要小,但我们的消费者非常活跃),但是我不是基础设施团队的,但我参与了一些devops任务。我不认为你会找到一个确切的数字,所以我会尝试分享一些技巧和窍门来帮助你:一定要阅读整个redis管理页面。那里有很多有用的信息。我将重点介绍其中的一些技巧:假设您要设置一个linux主机,请编辑 /etc/sysctl.conf 并设置一个高 net.core.somaxconn (拉比特) 4096 ). 检查下列文件: tcp-backlog 请在redis.conf中进行配置,以获取对此的解释。假设您要设置一个linux主机,请编辑 /etc/sysctl.conf 并设置 vm.overcommit_memory = 1 . 请阅读下面的详细解释。假设您要设置一个linux主机,请编辑 /etc/sysctl.conf 并设置 fs.file-max . 这对于您的用例非常重要。open file handles/file descriptors limit本质上是so可以处理的最大文件描述符数(每个客户机代表一个文件描述符)。请查看redis文档。rabbitmq文档还提供了一些关于它的有用信息。如果你编辑 /etc/sysctl.conf 文件,运行 sysctl -p 重新加载。“一定要禁用linux内核的透明大页面功能,这将对内存使用和延迟产生负面影响。这是通过以下命令完成的: echo never > /sys/kernel/mm/transparent_hugepage/enabled ”将此命令也添加到 /etc/rc.local 使其在重新启动时永久化。以我的经验,redis不是很需要资源,所以我相信你不会有cpu的问题。内存与您打算在其中存储多少数据直接相关。如果您设置了一个具有多个核心的服务器,请考虑使用多个redis服务器。redis(大部分)是单线程的,如果您在多核环境中使用单个示例,它不会使用所有cpu资源。redis服务器在启动时也会警告错误/有风险的配置(对不起,旧的映像):
/etc/sysctl.conf
net.core.somaxconn
4096
tcp-backlog
vm.overcommit_memory = 1
fs.file-max
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
/etc/rc.local
将overmit\u memory设置为1表示linux可以放松并以更乐观的分配方式执行fork,这确实是您对redis的期望[来自redis faq]有三种可能的设置 vm.overcommit_memory .0(零):检查是否有足够的内存可用,如果有,允许分配。如果内存不足,请拒绝请求并向应用程序返回错误。1(一):允许内存分配超过物理ram加上交换,定义如下 vm.overcommit_ratio . 这个 vm.overcommit_ratio 参数是一个百分比,当决定内核可以超限多少内存时,这个百分比加在内存量上。例如,一个 vm.overcommit_ratio 50和1GB的ram意味着内核将允许在请求失败之前分配最多1.5GB的内存,加上交换。2(2):内核相当于“所有赌注都已下注”,设置为2告诉内核总是将成功返回到应用程序的内存请求。这绝对是奇怪和可怕的,因为它听起来。
vm.overcommit_memory
vm.overcommit_ratio
1条答案
按热度按时间8aqjt8rx1#
免责声明:我在一家使用redis的公司工作过,该公司的规模有点大(可能比你的情况要小,但我们的消费者非常活跃),但是我不是基础设施团队的,但我参与了一些devops任务。
我不认为你会找到一个确切的数字,所以我会尝试分享一些技巧和窍门来帮助你:
一定要阅读整个redis管理页面。那里有很多有用的信息。我将重点介绍其中的一些技巧:
假设您要设置一个linux主机,请编辑
/etc/sysctl.conf
并设置一个高net.core.somaxconn
(拉比特)4096
). 检查下列文件:tcp-backlog
请在redis.conf中进行配置,以获取对此的解释。假设您要设置一个linux主机,请编辑
/etc/sysctl.conf
并设置vm.overcommit_memory = 1
. 请阅读下面的详细解释。假设您要设置一个linux主机,请编辑
/etc/sysctl.conf
并设置fs.file-max
. 这对于您的用例非常重要。open file handles/file descriptors limit本质上是so可以处理的最大文件描述符数(每个客户机代表一个文件描述符)。请查看redis文档。rabbitmq文档还提供了一些关于它的有用信息。如果你编辑
/etc/sysctl.conf
文件,运行sysctl -p
重新加载。“一定要禁用linux内核的透明大页面功能,这将对内存使用和延迟产生负面影响。这是通过以下命令完成的:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
”将此命令也添加到/etc/rc.local
使其在重新启动时永久化。以我的经验,redis不是很需要资源,所以我相信你不会有cpu的问题。内存与您打算在其中存储多少数据直接相关。
如果您设置了一个具有多个核心的服务器,请考虑使用多个redis服务器。redis(大部分)是单线程的,如果您在多核环境中使用单个示例,它不会使用所有cpu资源。
redis服务器在启动时也会警告错误/有风险的配置(对不起,旧的映像):
关于overmit memory(vm.overmit\u memory)的说明
将overmit\u memory设置为1表示linux可以放松并以更乐观的分配方式执行fork,这确实是您对redis的期望[来自redis faq]
有三种可能的设置
vm.overcommit_memory
.0(零):检查是否有足够的内存可用,如果有,允许分配。如果内存不足,请拒绝请求并向应用程序返回错误。
1(一):允许内存分配超过物理ram加上交换,定义如下
vm.overcommit_ratio
. 这个vm.overcommit_ratio
参数是一个百分比,当决定内核可以超限多少内存时,这个百分比加在内存量上。例如,一个vm.overcommit_ratio
50和1GB的ram意味着内核将允许在请求失败之前分配最多1.5GB的内存,加上交换。2(2):内核相当于“所有赌注都已下注”,设置为2告诉内核总是将成功返回到应用程序的内存请求。这绝对是奇怪和可怕的,因为它听起来。