Redis的内存和CPU峰值(redis memory and cpu spikes)

2019-09-02 00:56发布

我们使用Redis的在我们的应用中的一些数据,这是完全很大。 我注意到在偶尔不过CPU和内存尖峰redis-server进程。

这是长颈鹿仪表板从我们的生产和暂存环境。 分期显然是忙少得多,但产量并不十分繁忙或者正常...

这似乎与背景减排相关,但不是所有的人。 只有那些少数的创建这个尖峰。 也许都这样了,它只是下降到虽然测量分辨率(有的根本就没有我们的内存/ CPU监测周期内捕获)。 我不能完全肯定。

我一直在想,这是否有望/正常。 我们没有观察到任何问题,但我想是在安全方面。 如果我们有我们的生产更多的流量/活动,是我们可能会看到更多的尖峰喜欢这些?

更新

围绕尖峰时间redis的日志文件

[18588] 05 May 11:42:51.004 * 10 changes in 300 seconds. Saving...
[18588] 05 May 11:42:51.258 * Background saving started by pid 32712
[32712] 05 May 11:43:00.511 * DB saved on disk
[32712] 05 May 11:43:00.549 * RDB: 1 MB of memory used by copy-on-write
[18588] 05 May 11:43:00.629 * Background saving terminated with success

Answer 1:

从这个实验进一步和阅读有关Redis的持久性 ,我认为以下意见可以进行:

  • 当使用RDB(默认设置),将redis的每一个时间叉save操作被触发,其(默认)被设定为每15分钟作为一个至少一次。 当更多的写入Redis的执行,然后RDB写入作为每60秒一次的频率。
  • 每个叉将使用一个“写入时复制”的内存分配,这意味着,虽然内存不会真正双-它会出现这样的类似工具pshtop等。
  • 叉本身可以是一个相当CPU密集型操作, 特别是在基于Xen的虚拟主机 (这是我们目前使用的)。
  • 写操作似乎完全覆盖现有的RDB文件。 它不会只写了改变,而是转储整个数据集到磁盘。

因此,与4GB内存和数据适度的虚拟主机设置的750MB左右的(当时我张贴的问题),这开始变得相当“昂贵”。 我们观察到的那些CPU /内存峰值,以及增加IO,甚至在相当温和的负载/ Redis的使用。

因此,要回答我的问题 - 这似乎是“预期”的行为。

至于改善的情况下,我们选择切换我们的配置使用RDB和AOF的组合。 AOF(只添加的文件),确实出现了只修改写入磁盘。 你可以(也应该)还配置AOF文件重写(使用auto-aof-rewrite-percentageauto-aof-rewrite-min-size设置)。 它也建议仍然使用RDB的快照。 然而,在这种配置中,你也许可以做到完全重写/快照的频率,并仍然保持非常良好的性能和偶数更好的耐久性。



Answer 2:

如果我没有记错,Redis的叉的过程当它后台保存,但只复制正在更改,而保存过程中的记忆。 因此,在CPU /内存的凹凸会在很大程度上取决于有多少数据同时保存正在运行正在改变。 因此,它当然可以在次巨大涨幅,并在较小秒杀其他时间(或根本没有,这取决于你的负载的外观)。



Answer 3:

该文档说:“Redis的AOF作品逐步更新现有的状态,像MySQL或MongoDB的呢,而RDB快照一次又一次地创造一切从头开始,这是概念上更稳健。”

来源: http://redis.io/topics/persistence (AOF中的缺点)



文章来源: redis memory and cpu spikes