我有一个由heroku(https://elements.heroku.com/addons/heroku-redis)托管的redis实例并使用该计划" Premium 1"
此redis仅用于托管名为Bull(https://www.npmjs.com/package/bull)
的小型队列系统即使在redis中几乎没有存储任何作业,内存使用率现在几乎达到100%(允许100 Mo)。
我在这个实例上运行了INFO
命令,这里是重要的部分(如果需要可以发布更多):
# Server
redis_version:3.2.4
# Memory
used_memory:98123632
used_memory_human:93.58M
used_memory_rss:470360064
used_memory_rss_human:448.57M
used_memory_peak:105616528
used_memory_peak_human:100.72M
total_system_memory:16040415232
total_system_memory_human:14.94G
used_memory_lua:280863744
used_memory_lua_human:267.85M
maxmemory:104857600
maxmemory_human:100.00M
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.79
mem_allocator:jemalloc-4.0.3
# Keyspace
db0:keys=45,expires=0,avg_ttl=0
# Replication
role:master
connected_slaves:1
master_repl_offset:25687582196
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:25686533621
repl_backlog_histlen:1048576
我很难弄清楚如何使用95 Mo,只存储50个对象。这些对象非常小,通常是一个包含2-3个字段的JSON,包含小字符串和ID
我试过https://github.com/gamenet/redis-memory-analyzer但是当我尝试运行它时它就崩溃了
我无法获得转储,因为Heroku不允许它。
我有点迷失在这里,可能会有一些明显的错过,但我已经达到了对Redis理解的极限。
提前感谢任何提示/指针。
修改
我们必须升级我们的Redis实例以保持一切正常运行,但似乎问题仍然存在。目前坐在34键/ 34 Mo
我已经尝试redis-cli --bigkeys
:
Sampled 34 keys in the keyspace!
Total key length in bytes is 743 (avg len 21.85)
9 strings with 43 bytes (26.47% of keys, avg size 4.78)
0 lists with 0 items (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
24 hashs with 227 fields (70.59% of keys, avg size 9.46)
1 zsets with 23 members (02.94% of keys, avg size 23.00)
我很确定某处有一些建筑物,但我无法找到。
编辑2
我实际上是盲目的:我在首次创建此帖子时运行的INFO命令中used_memory_lua_human:267.85M
,现在used_memory_lua_human:89.25M
在新实例上
这似乎超级高,可能会解释内存使用情况
答案 0 :(得分:1)
经过大量挖掘后,问题不是来自Redis或Heroku。
我们使用的队列系统有一个近期的错误,Redis最终缓存一个Lua脚本,随着时间的推移反复占用内存。
此处有更多信息:https://github.com/OptimalBits/bull/issues/426
感谢那些花时间回复的人。
答案 1 :(得分:0)
数据库中只有45个密钥,因此您可以做的是:
KEYS *
命令列出所有密钥DEBUG OBJECT <key>
命令,它将返回序列化长度,以便您更好地了解哪些键占用了大量空间。备选方案是运行redis-cli --bigkeys
,以便显示最大的密钥。您可以通过特定的数据类型命令查看密钥的内容 - 对于字符串它是GET
命令,对于哈希它是HGETALL
等等。