Redis - 监控内存使用情况

koz*_*her 9 memory redis

我目前正在测试Redis数据库(在本地)插入密钥.我有超过500万的密钥,我只有4GB的RAM,所以有一刻我达到RAM的容量和交换填充(我的电脑下降)...

我的问题是:如何在具有Redis数据库的计算机上进行监视内存使用,并以这种方式警告不再在Redis数据库中插入一些键?

谢谢.

小智 11

内存是Redis性能的关键资源.使用的内存定义了Redis使用其分配器(标准libc,jemalloc或替代分配器,如tcmalloc)分配的总字节数.

您可以通过运行"info memory"来收集Redis实例的所有内存利用率指标数据.

 
127.0.0.1:6379> info memory
Memory
used_memory:1007280
used_memory_human:983.67K
used_memory_rss:2002944
used_memory_rss_human:1.91M
used_memory_peak:1008128
used_memory_peak_human:984.50K

有时,当Redis配置为没有最大内存限制时,内存使用量最终将达到系统内存,服务器将开始抛出"Out of Memory"错误.在其他时候,Redis配置了最大内存限制但没有禁止策略.这将导致服务器不会驱逐任何密钥,从而在释放内存之前阻止任何写入.解决此类问题的方法是使用最大内存和一些驱逐策略配置Redis.在这种情况下,服务器开始使用逐出策略驱逐密钥,因为内存使用量达到最大值.

内存RSS(驻留集大小)是操作系统分配给Redis的字节数.如果'memory_rss'与'memory_used'的比率大于~1.5,则表示存储器碎片.可以通过重新启动服务器来恢复碎片化的内存.


Hri*_*sto 10

关于内存使用,我建议您查看 redis.io FAQ和这篇关于使用 redis 作为 LRU 缓存的文章

您可以通过 maxmemory 配置设置限制内存使用量,在这种情况下,一旦达到内存限制,所有写入请求都将失败并显示错误,或者您可以将 maxmemory-policy 设置为 allkeys-lru,例如,开始覆盖服务器上最近最少使用的数据以及您当前需要的东西等。对于大多数用例,您有足够的灵活性通过适当的配置来处理此类问题。

我的建议是保持简单并通过 redis 服务器的配置来管理这个问题,而不是通过操作系统级监控等引入额外的复杂性。


Ale*_*exR 5

有一个很好的Unix实用程序vmstat。它像top一样,但是在命令行上,因此您可以获取内存使用情况并在系统停止之前做好准备。您也可以ps v PID用来获取有关特定过程的信息。可以通过以下方式检索Redis的PID:pidof redis-server