1

我们的 Redis 4.0.2 实例出现了一些奇怪的内存问题。主实例的比率为 0.12,而从属实例的比率合理,略高于 1。当我们重新启动主实例时,内存碎片率回到 1,直到我们达到峰值负载时间,然后比率又回落到小于 0.2。操作系统(Ubuntu)告诉我们 redis 实例正在使用 13GB 的虚拟内存和 1.6GB 的 RAM。一旦发生这种情况,大部分数据都会被交换到磁盘上,性能几乎会停止。

我们的密钥在被清除之前往往会持续一两天。大多数值是散列和 zset,大约有 100 个条目,每个条目小于 1kb 左右。

我们不确定是什么原因造成的。我们已经尝试调整操作系统overcommit_memory。我们也尝试了新MEMORY PURGE命令,但似乎都没有帮助。我们正在寻找其他可以探索的东西和尝试的建议。任何意见,将不胜感激。

造成这种情况的可能原因是什么?我们如何才能使该比率更接近 1?

这是我们的内存信息的转储:

127.0.0.1:8000> info memory
# Memory
used_memory:12955019496
used_memory_human:12.07G
used_memory_rss:1676115968
used_memory_rss_human:1.56G
used_memory_peak:12955019496
used_memory_peak_human:12.07G
used_memory_peak_perc:100.00%
used_memory_overhead:19789422
used_memory_startup:765600
used_memory_dataset:12935230074
used_memory_dataset_perc:99.85%
total_system_memory:33611145216
total_system_memory_human:31.30G
used_memory_lua:945152
used_memory_lua_human:923.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.13
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

还有我们的记忆统计:

127.0.0.1:8000> memory stats
 1) "peak.allocated"
 2) (integer) 12954706848
 3) "total.allocated"
 4) (integer) 12954623968
 5) "startup.allocated"
 6) (integer) 765600
 7) "replication.backlog"
 8) (integer) 1048576
 9) "clients.slaves"
10) (integer) 33716
11) "clients.normal"
12) (integer) 184494
13) "aof.buffer"
14) (integer) 0
15) "db.0"
16) 1) "overhead.hashtable.main"
    2) (integer) 17691184
    3) "overhead.hashtable.expires"
    4) (integer) 32440
17) "overhead.total"
18) (integer) 19756010
19) "keys.count"
20) (integer) 337422
21) "keys.bytes-per-key"
22) (integer) 38390
23) "dataset.bytes"
24) (integer) 12934867958
25) "dataset.percentage"
26) "99.853401184082031"
27) "peak.percentage"
28) "99.999359130859375"
29) "fragmentation"
30) "0.12932859361171722"
4

0 回答 0