聊一聊Redis内存碎片清理

当Redis中清理了大量的Key之后原先Redis申请的内存(used_memory_rss)将继续持有而不会释放,此时查看内存信息将会看到存在大量的内存碎片。那么,Redis的内存碎片可以清理么,该如何清理呢?

翻看了Redis的相关资料发现,Redis4版本之后开始支持内存碎片的清理,于是进行了一次测试,内容如下:

1、搭建Redis

搭建一个Redis,版本为4.0.14.搭建步骤参考历史博文或微信公众号,步骤相对简单,没有太多幺蛾子,很快便可以搭建成功。

2、插入一堆Key,使其内存占用很大

可以批量写一个循环,插入大量key。

3、删除90%以上的key

循环删除key或在创建key时设置过期时间,待key删除或过期之后,可以查看内存的情况。

127.0.0.1:6379> info memory 
# Memory
used_memory:137040696
used_memory_human:130.69M
used_memory_rss:11705876480
used_memory_rss_human:10.90G
used_memory_peak:12091169848
used_memory_peak_human:11.26G
used_memory_peak_perc:1.13%
used_memory_overhead:3473184
used_memory_startup:786648
used_memory_dataset:133567512
used_memory_dataset_perc:98.03%
total_system_memory:16862617600
total_system_memory_human:15.70G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:12000000000
maxmemory_human:11.18G
maxmemory_policy:noeviction
mem_fragmentation_ratio:85.42
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

可以发现实际使用内存为130.69M,而Redis申请的内存为10.90G,碎片率mem_fragmentation_ratio为85.42,相当高了。

4、清理内存碎片

默认情况下自动清理碎片的参数是关闭的,可以按如下命令查看。

127.0.0.1:6379> config get activedefrag 
1)"activedefrag"
2)"no"

启动自动清理内存碎片。

127.0.0.1:6379> config set  activedefrag yes
OK

开启后再查看内存信息。

127.0.0.1:6379> info memory
# Memory
used_memory:138029408
used_memory_human:131.64M
used_memory_rss:5052907520
used_memory_rss_human:4.71G
used_memory_peak:12091169848
used_memory_peak_human:11.26G
used_memory_peak_perc:1.14%
used_memory_overhead:3752728
used_memory_startup:786648
used_memory_dataset:134276680
used_memory_dataset_perc:97.84%
total_system_memory:16862617600
total_system_memory_human:15.70G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:12000000000
maxmemory_human:11.18G
maxmemory_policy:noeviction
mem_fragmentation_ratio:36.61
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

此时redis占用的内存used_memory_rss已降低至4.71G了,内存碎片为36.61。

5、查看内存分配情况

此时也可以查看内存分配情况,其中重要的指标是查看bins里的util,此时可以发现当前最大的已达到0.998(1除外)。

127.0.0.1:6379> memory malloc-stats
___ Begin jemalloc statistics ___
Version:4.0.3-0-ge9192eacf8935e29fc62fddc2701f7942b1cc02c
Assertions disabled
Run-time option settings:
opt.abort:false
opt.lg_chunk:21
opt.dss:"secondary"
opt.narenas:8
opt.lg_dirty_mult:3(arenas.lg_dirty_mult:3)
opt.stats_print:false
opt.junk:"false"
opt.quarantine:0
opt.redzone:false
opt.zero:false
opt.tcache:true
opt.lg_tcache_max:15
CPUs:2
Arenas:8
Pointer size:8
Quantum size:8
Page size:4096
Min active:dirty page ratio per arena:8:1
Maximum thread-cached size class:32768
Chunk size:2097152(2^21)
Allocated:138983464, active:149237760, metadata:133846144, resident:299532288, mapped:5274861568
Current active ceiling:153092096
arenas[0]:
assigned threads:1
dss allocation precedence: secondary
min active:dirty page ratio:8:1
dirty pages:36435:4043 active:dirty,348100 sweeps,737670 madvises,4686933 purged
allocated nmalloc ndalloc nrequests
small:511734162794625727800354215995984
large:20701184639706763967137682104
huge:67108864754753754
total:1389834643434407834197820223678842
active:149237760
mapped:5270667264
metadata: mapped:130830336, allocated:115776
bins: size ind allocated nmalloc ndalloc nrequests curregs curruns regs pgs util nfills nflushes newruns reruns
8029524753438418226389369151210.7202600256610
16169960057021025658377347779164372539225610.435617126480722136251
24282459296485329614174754923393435844151230.152102398100732165611083971
323800182818031107716725112810.195103188310
404400893883128504610151250.01978779110
485182410123100852381316838125630.14863907039189
5661120066576366556336542832006051270.00611325184341302135
64744480222190122212068140167695626410.1753863443809347021105
808224312032410503213011126405452803915425650.711363084067312556268
96912483841173523116051956326121300411612830.87517234224429049828
112102571524970944947983780792296925670.99610382207001942529
1281117305624114823979615009561352433210.982119941926874911149
16012510880676589673396186704531932512850.99712036203445279974
192138678416315416270210485345286430.8828095199092538885
22414105078493741493272388263646913712870.99014534213277237653
25615177920122377121682108334695441610.987112161809476481025
320161587201606871601911395080496106450.7758282199322458806
38417108288871668688456781282103230.8817364185942691830
448185205763118653107032352761162196470.95598852025748491277
5121936608013907713836213670871591810.982166772120317307758
640202963201366741362111387569463153250.96487811932742941194
76821754176164055163073154637982621630.989137511951410232853
89622507136142840142274104081566193270.93088311929744881232
102423460800812408079071715450113410.9951141117538202041932
1280249676801423751416193997592756481650.98412880191628852974
1536258064008324082715136396552566830.9941174417875102961083
179226507136709317064850310283181670.98281401791544031138
204827540672529155265140011264132211860416582264251888
2560281487360115947115366268877458173850.994150121996914410962
307229102297670646703135882233384430.9911044517189175462050
358430163430476807763516603045657871111901754295381175
409631487424569595684043668119119111917616863569590
512032615424014546114425926750971202301450.9981770422138360761483
614433119808045380451858331519598230.994805016148227211759
7168348243203251832403131084511529470.99165981441680631715
819235188006403552103529153629722295229512139103421283552100
102403622323207616875950662952181092511196017361379171769
12288372039808528605269440296166166131894116632528600
1433638196403236992368552461013769270.992687915285184221777
large: size ind allocated nmalloc ndalloc nrequests curruns
163843968812875487506776042
204804088064093919348129356143
245764168812862796251636728
286724260211241874166426121
3276843281804817937178511843086
4096044143360063064506306415630645035
4915245127795251175091511726
573444686016059165901591615
65536473932162953294729536
8192048131072082448228824416
98304492949125037503450373
114688505734404224421942245
131072513932162233223022333
16384052163840027982788279810
1966085311796481740173417406
229376542293761162116111621
262144555242888728708722
327680563276801290128912901
3932165707827827820
4587525805205205200
524288595242884003994001
655360606553606066056061
7864326103713713710
9175046201961961960
10485766320971522242222242
13107206413107203283273281
15728646501791791790
18350086608383830
huge: size ind allocated nmalloc ndalloc nrequests curhchunks
20971526701101101100
26214406802632632630
31457286908686860
36700167009191910
41943047104545450
52428807205555550
62914567302626260
73400327401515150
83886087501313130
104857607608880
125829127701313130
146800647802220
167772167904440
209715208002220
251658248102220
293601288202220
335544328304440
419430408402220
503316488502220
587202568602220
6710886487671088647671
---
--- End jemalloc statistics ---

6、手动清理

其实还可以手动清理,可以采用如下命令

127.0.0.1:6379> memory purge
OK

7、相关参数配置说明

内存清理相关参数如下,可以使用config get的方式查看对应的值。

# Enabled active defragmentation
# 碎片整理总开关
# activedefrag yes
# Minimum amount of fragmentation waste to start active defrag
# 内存碎片达到多少的时候开启整理
active-defrag-ignore-bytes 100mb
# Minimum percentage of fragmentation to start active defrag
# 碎片率达到百分之多少开启整理
active-defrag-threshold-lower 10
# Maximum percentage of fragmentation at which we use maximum effort
# 碎片率小余多少百分比开启整理
active-defrag-threshold-upper 100
# Minimal effort for defrag in CPU percentage
active-defrag-cycle-min 25
# Maximal effort for defrag in CPU percentage
active-defrag-cycle-max 75

至此,Redis4.0.14版本的内存碎片清理就测试完成了。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/251481.html<

(0)
运维的头像运维
上一篇2025-04-29 00:06
下一篇 2025-04-29 00:08

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注