redis可以配置使用内存的最大值,配置项是maxmemory。如果不设置的话,64位程序默认内存没有限制,而32位程序的默认值为3G。相关代码如下:
if (server.arch_bits == 32 && server.maxmemory == 0) { redisLog(REDIS_WARNING,"Warning: 32 bit instance detected but no memory limit set. Setting 3 GB maxmemory limit with 'noeviction' policy now."); server.maxmemory = 3072LL*(1024*1024); /* 3 GB */ server.maxmemory_policy = REDIS_MAXMEMORY_NO_EVICTION; }
redis使用zmalloc去做内存的分配和释放工作,这样便于统计当前redis进程消耗了多少内存。
通过“info”命令,我们可以得到当前redis已使用的内存值:used_memory字段;通过“config get maxmemory”命令可以得到redis可使用内存的最大值。这样一旦监控程序发现redis使用的内存超过一个百分比(例如:80%),就可以通知我们,进而让我们采取相应的措施。
参考资料:
(1)When would one use malloc over zmalloc?