Redis的内存统计数据,这3个有什么区别?

brc7rcf0  于 2022-10-31  发布在  Redis
关注(0)|答案(1)|浏览(246)

当你在机器上运行redis进程时,有redis-cli.so这样我们就可以得到进程的一些信息。

❯ redis-cli
127.0.0.1:6379> info memory

有三个东西叫做used_memory_rssused_memory_peakmaxmemory。据我所知,used_memory_rss是Redis实际消耗的内存。我还知道Redis一旦占用内存,就不会释放(释放)内存给操作系统。(他们不会做GC)除非你重新启动进程。
那么used_memory_peak怎么可能比used_memory_rss大呢?maxmemory是什么?

xxe27gdn

xxe27gdn1#

maxmemory是相应配置指令的值,它与memory optimization tips一起在INFO command documentation中详细描述。
关于Redis从来不释放内存--你怎么会这么想呢?文档中的说法有些不同:
当键被移除时,Redis并不总是会释放(返回)内存给操作系统...这是因为底层的分配器不能轻易释放内存。例如,大多数被移除的键通常都被分配在与其他键相同的页面中。
“Not always”与“never”不同:)它是否释放内存主要取决于使用的是什么分配器以及您具有什么数据访问模式。
例如,MEMORY PURGE命令(仅适用于jemalloc)* 可以 * 触发将某些内存释放给操作系统:

127.0.0.1:6379> info memory                                                                                                                                                                                          

# Memory

used_memory:1312328                                                                                                                                                                                                  
used_memory_human:1.25M                                                                                                                                                                                              
used_memory_rss:7118848                                                                                                                                                                                              
used_memory_rss_human:6.79M
...
127.0.0.1:6379> memory purge
OK      
127.0.0.1:6379> info memory

# Memory

used_memory:1312328    
used_memory_human:1.25M    
used_memory_rss:6041600 
used_memory_rss_human:5.76M
...

(note used_memory_rss略微降低-这意味着在某些幸运的情况下,它 * 可以 * 低于峰值使用率)

相关问题