我正在使用 redis 并注意到它崩溃并出现以下错误:
MISCONF Redis is configured to save RDB snapshots
我尝试了这篇文章中建议的解决方案
但就权限和空间而言,一切似乎都还可以。
htop 命令告诉我 redis 正在消耗 70% 的 RAM。我试图停止/重新启动 redis 以刷新,但在启动时,redis 使用的 RAM 量急剧增长并停止在 66% 左右。我很确定此时没有进程使用任何 redis 实例!
那里发生了什么?
我正在使用 redis 并注意到它崩溃并出现以下错误:
MISCONF Redis is configured to save RDB snapshots
我尝试了这篇文章中建议的解决方案
但就权限和空间而言,一切似乎都还可以。
htop 命令告诉我 redis 正在消耗 70% 的 RAM。我试图停止/重新启动 redis 以刷新,但在启动时,redis 使用的 RAM 量急剧增长并停止在 66% 左右。我很确定此时没有进程使用任何 redis 实例!
那里发生了什么?
长大的 ram 问题是 Redis 在第一次加载数据时的预期行为,在重新启动后,将数据写入磁盘(快照过程)。Redis 倾向于尽可能多地分配内存,除非您不在 conf 文件中使用“maxmemory”选项。
它分配内存但不立即释放。有时需要几个小时,我看到过这样的案例。
关于 Redis 的众所周知的事实是,它最多可以分配两倍于它保存的数据集大小的内存。
我建议你等待几个小时而不重新启动(Redis 可以在这段时间内工作,get/set 操作等)并继续观察内存。
请也检查一下
删除键时,Redis 并不总是向操作系统释放(归还)内存。这对于 Redis 来说并没有什么特别之处,但它是大多数 malloc() 实现的工作方式。例如,如果您用 5GB 的数据填充一个实例,然后删除相当于 2GB 的数据,则驻留集大小(也称为 RSS,它是进程消耗的内存页数)可能仍然是大约 5GB,即使 Redis 声称用户内存在 3GB 左右。发生这种情况是因为底层分配器不能轻易释放内存。例如,大多数已删除的键通常与仍然存在的其他键分配在相同的页面中。