【发布时间】:2017-07-03 04:47:52
【问题描述】:
我有一个由 heroku (https://elements.heroku.com/addons/heroku-redis) 托管并使用“Premium 1”计划的 redis 实例
这个 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
我很难弄清楚如何在仅存储 50 个对象的情况下使用 95 Mo。这些对象非常小,通常是一个带有 2-3 个包含小字符串和 id 的字段的 JSON
我尝试过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
我实际上是盲人:used_memory_lua_human:267.85M 在我第一次创建这篇文章时运行的 INFO 命令中,现在used_memory_lua_human:89.25M 在新实例上
这似乎超高,并且可能解释了内存使用情况
【问题讨论】:
-
我会联系他们的支持 - 毕竟你要付钱给他们