Search code examples
memoryredisgarbage-collection

Redis memory stats. what is the differences between these 3?


When you running redis process in the machine, there are redis-cli. So that we can get some information of the process.

❯ redis-cli
127.0.0.1:6379> info memory

and there are 3 things called. used_memory_rss and used_memory_peak and maxmemory. As far as I know, used_memory_rss is actual memory that Redis is consuming. Also I know that once Redis take memory, it doesn't release(free) memory to OS.(They are not doing GC) unless you restart the process.

Then how is it possible that used_memory_peak is bigger than used_memory_rss? and what is maxmemory?


Solution

  • maxmemory is the value of the corresponding configuration directive, it is well-described in INFO command documentation along with the memory optimization tips.

    Regarding Redis never releasing memory - what makes you think so? The documentation says somewhat different:

    Redis will not always free up (return) memory to the OS when keys are removed... This happens because the underlying allocator can't easily release the memory. For example often most of the removed keys were allocated in the same pages as the other keys that still exist.

    "Not always" is not the same as "never" :) Whether it releases memory or not strongly depends on what allocator is being used and what data access patterns you have.

    For example, there is MEMORY PURGE command (works only with jemalloc) that can trigger some memory to be released to OS:

    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 slightly reduced - this means it can go below peak usage under certain lucky circumstances)