网站备案网站负责人,海淀做网站设计的公司,小程序外包公司哪家好,做网站开票内容是什么一、Redis 内存碎片内存碎片是指在内存分配的时候#xff0c;产生的不能重复利用的空间。例如#xff0c;内存空间还有3K#xff0c;应用程序想申请连续的3K空间#xff0c;虽然内存空间够#xff0c;但是空间分配为2K,1K#xff0c;总空间够#xff0c;但是不连续…一、Redis 内存碎片内存碎片是指在内存分配的时候产生的不能重复利用的空间。例如内存空间还有3K应用程序想申请连续的3K空间虽然内存空间够但是空间分配为2K,1K总空间够但是不连续导致应用程序申请失败这种无法利用的内存空间称之为内存碎片。内存分片会占用操作系统分配给redis的内存空间严重影响redis性能。
二、内存碎片形成原因 1.内因 内存分片策略引发redis默认使用jemalloc分配器分配内存。jemalloc每次分配2*N固定空间例如写入数据申请10K空间jemalloc会分配16K空间优点下次写入6K数据不需要申请内存空间缺点造成内存浪费。
2.外因 修改内存中数据修改包括增加和减少内存占用例如原来的16K空间数据增加或减少1K都会造成内存浪费。大量内存碎片的存在会造成redis实际内存使用率降低影响性能。
三、查看内存碎片 info memory 查看redis内存使用情况主要关注以下参数 used_memory: redis分配的内存总量单位为b used_memory_human: redis分配的内存总量单位为M used_memory_rss: redis向操作系统申请的内存总量单位为b used_memory_rss_human: redis向操作系统申请的内存总量单位为Mmem_fragmentation_ratio: 内存碎片率 mem_allocator:jemalloc-5.1.0 内存分配器
mem_fragmentation_ratio计算公式为used_memory_rss/used_memory 该值大于1但小于1.5。这种情况是合理的。该值过高时考虑清理内存例如该值大于1.5表示有50%空间浪费需要清理内存碎片。
四、内存碎片清理 内存碎片清理就是将不连续的内存空间重新整理为连续空间由于redis是单线程在清理过程中会造成堵塞降低性能。可通过以下三种方式清理1.手动清理内存碎片 memory purge 只支持jemalloc内存分配器
2.自动清理 修改redis.conf配置文件 activedefrag yes 开启自动清理内存碎片命令开启config set activedefrag yes active-defrag-ignore-bytes 100mb 内存碎片的字节数达到100M时开始清理 active-defrag-threshold-lower 10 内存碎片空间占操作系统分配给redis的总空间比例达到 10% 时开始清理 active-defrag-ignore-bytes与active-defrag-threshold-lower 两个条件同时满足会触发内存碎片清理当有一个不满足则停止清理 active-defrag-threshold-upper 100 内存碎片超过 100%则尽最大努力整理 active-defrag-cycle-min 1 自动清理过程所用CPU时间的比例不低于1%保证能正常清理 active-defrag-cycle-max 25 自动清理过程所用CPU时间的比例不高于25%超过25%停止清理避免redis主线程阻塞 active-defrag-max-scan-fields 1000 自动清理过程中长度小于1000的set/hash/zset/list才会进行自动清理----以上参数默认注释----
3.重启redis