绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Redis内存碎片清理
2020-01-11 15:29:44

当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 # Memoryused_memory:137040696used_memory_human:130.69Mused_memory_rss:11705876480used_memory_rss_human:10.90Gused_memory_peak:12091169848used_memory_peak_human:11.26Gused_memory_peak_perc:1.13%used_memory_overhead:3473184used_memory_startup:786648used_memory_dataset:133567512used_memory_dataset_perc:98.03%total_system_memory:16862617600total_system_memory_human:15.70Gused_memory_lua:37888used_memory_lua_human:37.00Kmaxmemory:12000000000maxmemory_human:11.18Gmaxmemory_policy:noevictionmem_fragmentation_ratio:85.42mem_allocator:jemalloc-4.0.3active_defrag_running:0lazyfree_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 yesOK

开启后再查看内存信息

127.0.0.1:6379> info memory# Memoryused_memory:138029408used_memory_human:131.64Mused_memory_rss:5052907520used_memory_rss_human:4.71Gused_memory_peak:12091169848used_memory_peak_human:11.26Gused_memory_peak_perc:1.14%used_memory_overhead:3752728used_memory_startup:786648used_memory_dataset:134276680used_memory_dataset_perc:97.84%total_system_memory:16862617600total_system_memory_human:15.70Gused_memory_lua:37888used_memory_lua_human:37.00Kmaxmemory:12000000000maxmemory_human:11.18Gmaxmemory_policy:noevictionmem_fragmentation_ratio:36.61mem_allocator:jemalloc-4.0.3active_defrag_running:0lazyfree_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-ge9192eacf8935e29fc62fddc2701f7942b1cc02cAssertions disabledRun-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: 15CPUs: 2Arenas: 8Pointer size: 8Quantum size: 8Page size: 4096Min active:dirty page ratio per arena: 8:1Maximum thread-cached size class: 32768Chunk size: 2097152 (2^21)Allocated: 138983464, active: 149237760, metadata: 133846144, resident: 299532288, mapped: 5274861568Current active ceiling: 153092096
arenas[0]:assigned threads: 1dss allocation precedence: secondarymin active:dirty page ratio: 8:1dirty pages: 36435:4043 active:dirty, 348100 sweeps, 737670 madvises, 4686933 purged allocated nmalloc ndalloc nrequestssmall: 51173416 27946257 27800354 215995984large: 20701184 6397067 6396713 7682104huge: 67108864 754 753 754total: 138983464 34344078 34197820 223678842active: 149237760mapped: 5270667264metadata: mapped: 130830336, allocated: 115776bins: size ind allocated nmalloc ndalloc nrequests curregs curruns regs pgs util nfills nflushes newruns reruns 8 0 2952 4753 4384 18226389 369 1 512 1 0.720 2600 2566 1 0 16 1 699600 5702102 5658377 34777916 43725 392 256 1 0.435 61712 64807 22136 251 24 2 824592 9648532 9614174 75492339 34358 441 512 3 0.152 102398 100732 16561 1083971 32 3 800 1828 1803 11077167 25 1 128 1 0.195 1031 883 1 0 40 4 400 893 883 1285046 10 1 512 5 0.019 787 791 1 0 48 5 1824 10123 10085 23813168 38 1 256 3 0.148 6390 7039 18 9 56 6 11200 665763 665563 3654283 200 60 512 7 0.006 11325 18434 1302 135 64 7 44480 2221901 2221206 8140167 695 62 64 1 0.175 38634 43809 34702 1105 80 8 2243120 3241050 3213011 12640545 28039 154 256 5 0.711 36308 40673 12556 268 96 9 1248384 1173523 1160519 5632612 13004 116 128 3 0.875 17234 22442 9049 828 112 10 257152 497094 494798 378079 2296 9 256 7 0.996 10382 20700 1942 529 128 11 173056 241148 239796 1500956 1352 43 32 1 0.982 11994 19268 7491 1149 160 12 510880 676589 673396 1867045 3193 25 128 5 0.997 12036 20344 5279 974 192 13 86784 163154 162702 104853 452 8 64 3 0.882 8095 19909 2538 885 224 14 1050784 937414 932723 882636 4691 37 128 7 0.990 14534 21327 7237 653 256 15 177920 122377 121682 108334 695 44 16 1 0.987 11216 18094 7648 1025 320 16 158720 160687 160191 1395080 496 10 64 5 0.775 8282 19932 2458 806 384 17 108288 87166 86884 56781 282 10 32 3 0.881 7364 18594 2691 830 448 18 520576 311865 310703 235276 1162 19 64 7 0.955 9885 20257 4849 1277 512 19 366080 139077 138362 136708 715 91 8 1 0.982 16677 21203 17307 758 640 20 296320 136674 136211 1387569 463 15 32 5 0.964 8781 19327 4294 1194 768 21 754176 164055 163073 154637 982 62 16 3 0.989 13751 19514 10232 853 896 22 507136 142840 142274 104081 566 19 32 7 0.930 8831 19297 4488 1232 1024 23 460800 81240 80790 71715 450 113 4 1 0.995 11411 17538 20204 1932 1280 24 967680 142375 141619 3997592 756 48 16 5 0.984 12880 19162 8852 974 1536 25 806400 83240 82715 1363965 525 66 8 3 0.994 11744 17875 10296 1083 1792 26 507136 70931 70648 50310 283 18 16 7 0.982 8140 17915 4403 1138 2048 27 540672 52915 52651 40011 264 132 2 1 1 8604 16582 26425 1888 2560 28 1487360 115947 115366 2688774 581 73 8 5 0.994 15012 19969 14410 962 3072 29 1022976 70646 70313 58822 333 84 4 3 0.991 10445 17189 17546 2050 3584 30 1634304 76807 76351 66030 456 57 8 7 1 11190 17542 9538 1175 4096 31 487424 56959 56840 43668 119 119 1 1 1 9176 16863 56959 0 5120 32 6154240 145461 144259 2675097 1202 301 4 5 0.998 17704 22138 36076 1483 6144 33 1198080 45380 45185 83315 195 98 2 3 0.994 8050 16148 22721 1759 7168 34 824320 32518 32403 1310845 115 29 4 7 0.991 6598 14416 8063 1715 8192 35 18800640 355210 352915 362972 2295 2295 1 2 1 39103 42128 355210 0 10240 36 2232320 76168 75950 66295 218 109 2 5 1 11960 17361 37917 1769 12288 37 2039808 52860 52694 40296 166 166 1 3 1 8941 16632 52860 0 14336 38 1964032 36992 36855 24610 137 69 2 7 0.992 6879 15285 18422 1777large: size ind allocated nmalloc ndalloc nrequests curruns 16384 39 688128 7548 7506 7760 42 20480 40 880640 9391 9348 1293561 43 24576 41 688128 6279 6251 6367 28 28672 42 602112 4187 4166 4261 21 32768 43 2818048 17937 17851 18430 86 40960 44 1433600 6306450 6306415 6306450 35 49152 45 1277952 5117 5091 5117 26 57344 46 860160 5916 5901 5916 15 65536 47 393216 2953 2947 2953 6 81920 48 1310720 8244 8228 8244 16 98304 49 294912 5037 5034 5037 3 114688 50 573440 4224 4219 4224 5 131072 51 393216 2233 2230 2233 3 163840 52 1638400 2798 2788 2798 10 196608 53 1179648 1740 1734 1740 6 229376 54 229376 1162 1161 1162 1 262144 55 524288 872 870 872 2 327680 56 327680 1290 1289 1290 1 393216 57 0 782 782 782 0 458752 58 0 520 520 520 0 524288 59 524288 400 399 400 1 655360 60 655360 606 605 606 1 786432 61 0 371 371 371 0 917504 62 0 196 196 196 0 1048576 63 2097152 224 222 224 2 1310720 64 1310720 328 327 328 1 1572864 65 0 179 179 179 0 1835008 66 0 83 83 83 0huge: size ind allocated nmalloc ndalloc nrequests curhchunks 2097152 67 0 110 110 110 0 2621440 68 0 263 263 263 0 3145728 69 0 86 86 86 0 3670016 70 0 91 91 91 0 4194304 71 0 45 45 45 0 5242880 72 0 55 55 55 0 6291456 73 0 26 26 26 0 7340032 74 0 15 15 15 0 8388608 75 0 13 13 13 0 10485760 76 0 8 8 8 0 12582912 77 0 13 13 13 0 14680064 78 0 2 2 2 0 16777216 79 0 4 4 4 0 20971520 80 0 2 2 2 0 25165824 81 0 2 2 2 0 29360128 82 0 2 2 2 0 33554432 83 0 4 4 4 0 41943040 84 0 2 2 2 0 50331648 85 0 2 2 2 0 58720256 86 0 2 2 2 0 67108864 87 67108864 7 6 7 1 ------ End jemalloc statistics ---

 

6.  手动清理

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

127.0.0.1:6379> memory purgeOK

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 percentageactive-defrag-cycle-min 25
# Maximal effort for defrag in CPU percentageactive-defrag-cycle-max 75

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


精彩推荐:

1.  MySQL不停地自动重启怎么办

2.  升级python,就是这么简单

3.  MySQL里trx_mysql_thread_id为0 的事务导致大量锁等待超时该咋整

4.  mysql8.0新增用户及加密规则修改的那些事

5.  Postgresql部署及简单操作

6.  比hive快10倍的大数据查询利器-- presto

7.  国产数据库部署初体验

8.   监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

9.   PostgreSQL主从复制--物理复制

10. PostgreSQL主从复制--逻辑复制

11.  MySQL从库生成大量小的relay log案例模拟

12.  MySQL传统点位复制在线转为GTID模式复制


分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库干货铺
创建时间:2021-12-13 09:36:52
致力于分享数据库、大数据、运维等方面相关知识,并通过生产环境遇到的实战案例分享排坑技巧等
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 数据库干货铺
    栈主

小栈成员

查看更多
  • miemieMIA
  • janefengwang
戳我,来吐槽~