used_memory_peak_perc 和 used_memory_dataset_perc 是什么意思?

Vic*_*ram 7 redis

这些是来自我的 redis 实例的内存使用情况统计信息。我不确定 used_memory_peak_perc 和 used_memory_dataset_perc 是什么意思——什么时候我应该开始担心?特别是因为后者越来越接近 100%。

# Memory
used_memory:454041104
used_memory_human:433.01M
used_memory_rss:558338048
used_memory_rss_human:532.47M
used_memory_peak:867680576
used_memory_peak_human:827.48M
used_memory_peak_perc:52.33%
used_memory_overhead:93054648
used_memory_startup:3662104
used_memory_dataset:360986456
used_memory_dataset_perc:80.15%
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:9901336167
maxmemory_human:9.22G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:1.23
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0
Run Code Online (Sandbox Code Playgroud)

Ita*_*ber 14

'used_memory_dataset_perc' 接近 100% 没有任何关系——理论上,它只能接近它,但永远不会完全达到它。该指标反映了当前分配的整体内存中的用户数据部分 ('used_memory_rss')。

类似地,'used_memory_peak_perc' 尝试反映相同的比率,但它使用实例生命周期(或重置统计信息)期间经历的峰值分配而不是当前分配。

您需要监控的是“used_memory_rss”以确保您不会耗尽资源(即 RAM 和“used_memory_dataset”以避免在不需要的情况下进入 OOM/驱逐。

请注意,'maxmemory' 定义了数据集的最大大小(即'used_memory_dataset' 的上限),而'used_memory_rss' 是从操作系统的角度分配给 Redis 的实际内存。'used_memory_rss' 包括数据、服务器的所有开销(例如数据结构、缓冲区等)并且可能是碎片化的。这意味着当您的“used_memory_dataset”达到“maxmemory”时,“used_memory_rss”可能明显大于“maxmemory”。