当Redis加载大数据集时,某些Linux系统变得非常慢

ant*_*rez 14 linux performance amazon-ec2 redis

我收到了一个 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 实例是:“High-Memory Extra Large Instance 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 片状,第二是确保它不是“第一次写入惩罚”(谷歌它),如果是然后您需要先在磁盘上添加 0。

来自@dvirsky:@antirez 我正在这样的 ec2 节点上运行许多 redis 实例。我注意到 bgsave 的速度有所放缓,但没有注意到这种现象。

小智 4

“top”的输出可能会提供一些线索。左上角附近有一个字段标记为“被盗百分比”,它反映了转移到同一物理盒子上其他来宾的硬件 CPU 数量。当虚拟机管理程序决定将更多 CPU 分配给另一个来宾时,尤其是当我执行一些长时间运行的 CPU 密集型任务时,我已经看到了此类速度减慢的情况。

不确定这是否是您的问题,但值得检查。