Redis删除数据后内存不释放解决方法
Redis About 1,367 words查看内存占用
info memory
输出
127.0.0.1:6379> info memory
# Memory
used_memory:3220899496
used_memory_human:3.00G
used_memory_rss:3304706048
used_memory_rss_human:3.08G
used_memory_peak:3221246176
used_memory_peak_human:3.00G
total_system_memory:33625522176
total_system_memory_human:31.32G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:3221225472
maxmemory_human:3.00G
maxmemory_policy:volatile-lru
mem_fragmentation_ratio:6.03
mem_allocator:jemalloc-4.0.3
字段解释
used_memory_human
:数据占用的内存used_memory_rss_human
:Redis
占用的内存used_memory_peak_human
:占用内存的峰值mem_fragmentation_ratio
:内存碎片率
mem_fragmentation_ratio
mem_fragmentation_ratio
= used_memory_rss
/ used_memory
越低越高,趋向于1,大于1的部分redis碎片占用的大小。范围在1 - 1.5,大于1.5说明碎片过多,必须要清理了。
解决方法
内存碎片过多解决方法需根据Redis
版本来定。
Redis4.0之前
只能重启Redis
服务。
Redis4.0之后
方法一:开启activedefrag
,自动清理内存碎片,默认没有开启,但线上会影响性能。
命令行中设置config set activedefrag yes
。
或在配置文件中修改配置:
# 开启自动内存碎片整理(总开关)
activedefrag yes
# 当碎片达到 100mb 时,开启内存碎片整理
active-defrag-ignore-bytes 100mb
# 当碎片超过 10% 时,开启内存碎片整理
active-defrag-threshold-lower 10
# 内存碎片超过 100%,则尽最大努力整理
active-defrag-threshold-upper 100
# 内存自动整理占用资源最小百分比
active-defrag-cycle-min 25
# 内存自动整理占用资源最大百分比
active-defrag-cycle-max 75
方法二:memory purge
命令,手动清理内存碎片,以一个I/O
事件的形式注册到主线程
当中去执行。
只能适用于jemalloc
内存分配器。
memory purge
的效果相比于activedefrag
并没有很大差别。
建议根据实际情况与activedefrag
配合使用。
文档
Views: 4,750 · Posted: 2020-10-22
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...