我目前正在测试Redis(本地)数据库中的密钥插入。 我有超过500万个密钥,而且我只有4GB内存,所以有一刻我达到了内存容量和交换填充(我的电脑电量下降)......
我的问题:如何在具有Redis数据库的计算机上使用监视内存,并以这种方式警告不再在Redis数据库中插入一些键?
感谢。
答案 0 :(得分:7)
内存是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,则表示存储器碎片。可以通过重新启动服务器来恢复碎片化的内存。
答案 1 :(得分:5)
关于内存使用情况,我建议您查看redis.io FAQ以及有关using redis as a LRU cache的文章。
您可以通过maxmemory配置设置限制内存使用量,在这种情况下,一旦达到内存限制,所有写入请求都将失败并显示错误,或者您可以将maxmemory-policy设置为allkeys-lru,例如,开始用你当前需要的东西覆盖服务器上最近最少使用的数据,等等。对于大多数用例,你有足够的灵活性通过适当的配置来处理这些问题。
我的建议是保持简单并通过配置redis服务器来管理这个问题,而不是通过操作系统级监控等引入额外的复杂性。
答案 2 :(得分:4)
有一个名为vmstat的优秀Unix实用程序。它就像top但命令行,因此您可以获得内存使用情况并在系统停止之前做好准备。您还可以使用ps v PID
获取有关特定流程的信息。可以通过以下方式检索Redis的PID:pidof redis-server