Redis占用太多内存

标签 redis predis

我在两个 centos 6 虚拟机中设置了一个 Redis(版本 4.0.6)哨兵集群。主从 Redis 服务器都将 maxmemory 设置为 10GB,将 maxmemory_policy 设置为 volatile-lru。

问题是,两台服务器都占用了大量内存。

硕士

used_memory:8959732536
used_memory_human:8.34G
used_memory_rss:14763728896
used_memory_rss_human:13.75G
used_memory_peak:10002148536
used_memory_peak_human:9.32G
used_memory_peak_perc:89.58%
used_memory_overhead:1344839894
used_memory_startup:761776
used_memory_dataset:7614892642
used_memory_dataset_perc:85.00%
total_system_memory:20957556736
total_system_memory_human:19.52G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:10000000000
maxmemory_human:9.31G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.65
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

奴隶

used_memory:8927665872
used_memory_human:8.31G
used_memory_rss:16422535168
used_memory_rss_human:15.29G
used_memory_peak:10000009472
used_memory_peak_human:9.31G
used_memory_peak_perc:89.28%
used_memory_overhead:1340505548
used_memory_startup:761792
used_memory_dataset:7587160324
used_memory_dataset_perc:84.99%
total_system_memory:20957556736
total_system_memory_human:19.52G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:10000000000
maxmemory_human:9.31G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.84
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

Redis 在主从上分别占用 14064.8 MB 和 15664.2 MB。 我确实有很多数据存储在 redis 中。他们中的大多数都设置了有效期,有些则没有有效期。

问题甚至在将最大内存设置为 10 GB 后仍然存在,为什么 redis 在 VM 中占用了大约 15GB。

我看到已用内存低于 10GB,而 rss 内存为 15GB。

我确实运行了 MEMORY PURGE,它清除了一些 rss 内存,但它会在几分钟内重新填充并继续增长。

有关如何控制内存消耗的任何建议或此问题的永久解决方案。我应该增加 VM 中的 RAM 吗?如果是,我应该添加多少 RAM 来处理这种情况。

最佳答案

RSS 内存将始终大于 Redis 为数据集使用的实际内存。看来,就您而言,您还遭受内存碎片的困扰,因此您应该考虑启用事件碎片整理程序。

也就是说,为您的服务器分配更多 RAM 将使它们达到更高的碎片率,因此您添加的越多,达到内存压力所需的时间就越长。由于碎片取决于使用情况,因此很难准确地说出您还需要多少,但在大多数情况下,碎片会在一段时间后趋于稳定,因此应该会给您一些指示。

关于Redis占用太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133338/

相关文章:

redis - celery 以 redis 作为代理,结果后端使用了太多的 redis 连接

Redis "Client List"用途及说明

redis - 如果我在主 Redis 实例上运行长事务或 Lua 脚本,它会阻塞只读从属实例吗

php - Composer - 由于照亮/支持版本不同而导致照亮/redis安装失败

php - 如何使用PHP中的Predis库检查redis服务器是否正在运行

python - 哪种redis方法比较好 : calling HSET multiple times or calling HMSET once?

php - 未捕获的 RedisException : session_write_close()

c# - StackExchange.Redis 无法与 Mac OS X 中的 Mono 连接

php - INFO 键空间等效于 predis

configuration - Laravel 5.2 中的 Predis 配置