Redis - 监控内存使用情况

19

我目前正在测试将键插入本地Redis数据库中。我有超过500万个键,但只有4GB的内存,因此在某一时刻我会达到内存容量并且交换填充(然后我的PC就会崩溃)...

我的问题是:如何监视Redis数据库所在的计算机上的内存使用情况,并通过这种方式提醒不要再向Redis数据库中插入更多的键?

谢谢。


你能具体一些吗?你所说的“警报不再插入某些键”是什么意思?你想在内存满了(或超过某个水平)时设置警报,还是想防止进一步插入?你所说的“某些键”是什么意思? - Sybille Peters
3个回答

36

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(Resident Set Size)是操作系统分配给Redis的字节数。如果‘memory_rss’与‘memory_used’的比率大于~1.5,则表明存在内存碎片。可以通过重新启动服务器来恢复碎片内存。


以下是一篇关于如何监控INFO命令中的所有统计信息并获得通知的文章:https://medium.com/@liesislukas/how-to-monitor-redis-or-anything-else-running-on-your-linux-machine-and-get-an-email-or-trigger-d0d62769f60e - Lukas Liesis

12

关于内存使用,建议您查看redis.io FAQ和有关将redis用作LRU缓存的文章

您可以通过maxmemory配置设置限制内存使用,一旦达到内存限制,所有写请求都将失败并出现错误,或者您可以将maxmemory-policy设置为allkeys-lru,以覆盖服务器上最近未使用的数据与您当前需要的数据等。对于大多数用例,您可以通过适当的配置灵活处理此类问题。

我的建议是通过redis服务器的配置来保持简单,并处理此问题,而不是引入操作系统级别的监视或类似的额外复杂性。


谢谢。我会看一下不同的解决方案,特别是使用 Redis 作为 LRU 缓存的文章(我以前没有看过)。 - kozher
1
不解决问题Q:在计算机内存不足时(通过maxmem设置很容易),无法再插入某些键的检测。请问如何在Redis达到maxmem之前通知?使用used_memory_peak设置吗? - droid192

5

有一个很好的Unix实用程序叫做vmstat。它类似于top命令,但是是命令行界面,所以您可以在系统崩溃之前获取内存使用情况并做好准备。您还可以使用ps v PID来获取特定进程的此信息。Redis的PID可以通过以下方式检索:pidof redis-server


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接