【发布时间】:2017-09-25 06:38:55
【问题描述】:
我最近遇到了一个SO question,操作员询问redis 在哪些场景中释放内存。似乎他们被建议硬启动是一种潜在的方式,但是在 redis 的情况下这是未经测试的。谁能让我确定这是否有效?
我有一个实时环境,我不想重新启动 redis-server,但它的内存占用现在正在衰弱,我正处于服务器迁移的边缘。所以对我来说,尽可能多地消除臃肿是很重要的(而且有很多臃肿)。
【问题讨论】:
我最近遇到了一个SO question,操作员询问redis 在哪些场景中释放内存。似乎他们被建议硬启动是一种潜在的方式,但是在 redis 的情况下这是未经测试的。谁能让我确定这是否有效?
我有一个实时环境,我不想重新启动 redis-server,但它的内存占用现在正在衰弱,我正处于服务器迁移的边缘。所以对我来说,尽可能多地消除臃肿是很重要的(而且有很多臃肿)。
【问题讨论】:
我不确定您所说的“膨胀”是什么意思,但附加服务器的 INFO ALL 输出可能会有所帮助。
默认情况下,Redis 使用 jemalloc 作为内存分配器。在 Redis 释放 RAM 后,分配器负责实际释放 RAM 以供操作系统回收。 Redis v4 及更高版本包括强制分配器清除已释放 RAM 的功能(MEMORY PURGE,请参阅https://github.com/antirez/redis-doc/pull/851)。
不管清除,还有内存碎片的问题。虽然 v4 具有实验性的主动碎片整理功能,但重新启动是在以前版本中“修复”该问题的方法。
为了减少重启和所涉及的停机时间,请使用 Redis 的复制创建一个从属服务器,并将您的应用故障转移到它,然后再重启原始主服务器。
【讨论】: