我收到了来自Redis用户的报告,由于我不是Linux及其调度程序领域的专家,所以我不确定要回答什么,但是我们(作为Redis项目)需要特别解决这类问题将来,与Redis Cluster一样,我们将在一个盒子中同时运行许多Redis实例。所以我想在这里寻求帮助。
问题:
- 内核:“ Linux redis1 2.6.32-305-ec2#9-Ubuntu SMP Thu Apr 15 08:05:38 UTC 2010 x86_64 GNU / Linux”
- 大量的可用RAM,没有其他进程执行重要的I / O。
- 重要提示,请在EC2大实例上运行,而不要在真实服务器上运行。我从未在非虚拟化环境中看到过类似的东西。EC2实例为:“高内存超大型实例17.1 GB内存,6.5 ECU(2个虚拟核,每个虚拟核具有3.25个EC2计算单元),420 GB本地实例存储,64位平台”。
基本上,一旦重新启动大型Redis实例,系统将变得非常缓慢,无法再在Shell上键入内容。当Redis加载实例时,它将使用100%的CPU(它会尽快加载数据)并顺序读取dump.rdb文件。I / O并不是特别高,因为加载受CPU约束,而不是I / O约束。
为什么在地上有两个CPU和大量RAM的盒子,磁盘上没有可交换的东西,应该基本上停止使用此工作负载?
我觉得这与EC2实例有很大关系,这与所使用的虚拟化技术有关,因为我一直将Redis 24 GB数据集加载到我的盒子中而没有任何问题(即使是Redis的其他实例)高负载运行)。
感谢您的提示!
救世主
编辑:添加一些我从Twitter收到的反馈:
来自@ezmobius:@antirez首先要做的是从/ mnt或本地临时驱动器中进行尝试,以查看其EBS脆弱性,第二是确保其不是“首次写罚”(用谷歌搜索),如果是,那么您需要先在磁盘上dd 0。
来自@dvirsky:@antirez我正好在这样的ec2节点上运行许多redis实例。我注意到bgsave的速度有所下降,但没有出现这种现象。