redis正在使用缓存吗?

redis正在使用缓存吗?,redis,Redis,120天后,我重新启动了redis服务器 重新启动前,内存使用率为29.5GB 重新启动后,内存使用率为27.5GB 那么,2GB是如何减少的呢 像本文一样在ram中释放内存 当按下键时,Redis不会总是将内存释放(返回)到操作系统 远离的。这并不是Redis的特别之处,但它是最重要的 malloc()实现可以工作。例如,如果您填充了一个实例 使用5GB的数据,然后删除相当于2GB的数据, 常驻集大小(也称为RSS,它是 进程消耗的内存页)可能仍然存在 5GB,即使Redis声称用户内存约为3

120天后,我重新启动了redis服务器

重新启动前,内存使用率为29.5GB

重新启动后,内存使用率为27.5GB

那么,2GB是如何减少的呢

像本文一样在ram中释放内存

当按下键时,Redis不会总是将内存释放(返回)到操作系统 远离的。这并不是Redis的特别之处,但它是最重要的 malloc()实现可以工作。例如,如果您填充了一个实例 使用5GB的数据,然后删除相当于2GB的数据, 常驻集大小(也称为RSS,它是 进程消耗的内存页)可能仍然存在 5GB,即使Redis声称用户内存约为3GB。这 发生的原因是基础分配器无法轻松释放 记忆。例如,大多数被删除的密钥通常是在 与仍然存在的其他键相同的页面。前一点 意味着您需要根据峰值内存配置内存 用法。如果您的工作负载不时需要10GB,即使大多数 在5GB所能提供的时间中,您需要为10GB预留空间

然而,分配器是智能的,能够重用空闲的数据块 内存,因此在释放2GB的5GB数据集后,当您启动 再次添加更多的键,您将看到RSS(常驻集大小)保持不变 当您添加最多2GB的额外密钥时,稳定且不会增长更多。 分配器基本上是试图重用2GB内存 以前(逻辑上)被释放

由于所有这些原因,当您 峰值时的内存使用量比当前使用的内存使用量大得多 记忆。碎片计算为内存量 当前正在使用(作为由执行的所有分配的总和) Redis)除以实际使用的物理内存(RSS值)。 因为RSS反映了峰值内存,当(虚拟)使用 内存很低,因为释放了很多键/值,但是RSS是 高,mem_used/RSS的比率将非常高

或者释放我的redis服务器使用的缓存内存

redis正在使用缓存吗?缓存中的缓存


谢谢

我建议你等几天再看看。尽管有很多(太多)原因导致进程不能向操作系统释放内存。它可以是内存碎片,但也可以是“预期的”:数据库和类似数据库的服务通常被设计成一旦获得内存就几乎永远不会释放。还有一个很好的理由:它预计将来会需要这个内存,所以释放它是没有意义的。我建议你等几天再看一看。尽管有很多(太多)原因导致进程不能向操作系统释放内存。它可以是内存碎片,但也可以是“预期的”:数据库和类似数据库的服务通常被设计成一旦获得内存就几乎永远不会释放。还有一个很好的理由:它预计将来会需要这个内存,所以释放它是没有意义的。