【问题标题】:Redis memory stats. what is the differences between these 3?Redis 内存统计。这3个有什么区别?
【发布时间】:2022-08-17 20:52:14
【问题描述】:
当你在机器上运行redis进程时,有redis-cli。这样我们就可以得到一些进程的信息。
❯ redis-cli
127.0.0.1:6379> info memory
有 3 件事叫。
used_memory_rss 和 used_memory_peak 和 maxmemory。据我所知,used_memory_rss 是 Redis 正在消耗的实际内存。我也知道,一旦 Redis 占用内存,它就不会向操作系统释放(释放)内存。(他们不做 GC)除非你重新启动进程。
那么used_memory_peak怎么可能大于used_memory_rss呢?
什么是maxmemory?
标签:
memory
redis
garbage-collection
【解决方案1】:
maxmemory 是相应配置指令的值,它在INFO command documentation 和memory optimization tips 中有很好的描述。
关于 Redis 从不释放内存 - 是什么让你这么认为?文档说的有些不同:
删除键时,Redis 并不总是向操作系统释放(归还)内存......这是因为底层分配器无法轻松释放内存。例如,大多数已删除的键通常与仍然存在的其他键分配在相同的页面中。
“不总是”与“从不”不同 :) 它是否释放内存很大程度上取决于正在使用的分配器以及您拥有的数据访问模式。
例如,有一个 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
...
(注used_memory_rss略有减少)