当你在机器上运行redis进程时,有redis-cli
.so这样我们就可以得到进程的一些信息。
❯ redis-cli
127.0.0.1:6379> info memory
有三个东西叫做used_memory_rss
、used_memory_peak
和maxmemory
。据我所知,used_memory_rss
是Redis实际消耗的内存。我还知道Redis一旦占用内存,就不会释放(释放)内存给操作系统。(他们不会做GC)除非你重新启动进程。
那么used_memory_peak
怎么可能比used_memory_rss
大呢?maxmemory
是什么?
1条答案
按热度按时间xxe27gdn1#
maxmemory
是相应配置指令的值,它与memory optimization tips一起在INFO command documentation中详细描述。关于Redis从来不释放内存--你怎么会这么想呢?文档中的说法有些不同:
当键被移除时,Redis并不总是会释放(返回)内存给操作系统...这是因为底层的分配器不能轻易释放内存。例如,大多数被移除的键通常都被分配在与其他键相同的页面中。
“Not always”与“never”不同:)它是否释放内存主要取决于使用的是什么分配器以及您具有什么数据访问模式。
例如,MEMORY PURGE命令(仅适用于
jemalloc
)* 可以 * 触发将某些内存释放给操作系统:(note
used_memory_rss
略微降低-这意味着在某些幸运的情况下,它 * 可以 * 低于峰值使用率)