柚子快報激活碼778899分享:緩存 Redis 內存碎片
柚子快報激活碼778899分享:緩存 Redis 內存碎片
一、Redis 內存碎片內存碎片是指在內存分配的時候,產生的不能重復利用的空間。例如,內存空間還有3K,應用程序想申請連續(xù)的3K空間,雖然內存空間夠,但是空間分配為2K,1K,總空間夠,但是不連續(xù),導致應用程序申請失敗,這種無法利用的內存空間稱之為"內存碎片"。內存分片會占用操作系統(tǒng)分配給redis的內存空間,嚴重影響redis性能。
二、內存碎片形成原因 1.內因 內存分片策略引發(fā):redis默認使用jemalloc分配器分配內存。jemalloc每次分配2*N固定空間,例如寫入數(shù)據(jù)申請10K空間,jemalloc會分配16K空間,優(yōu)點:下次寫入>=6K數(shù)據(jù)不需要申請內存空間,缺點造成內存浪費。
2.外因 修改內存中數(shù)據(jù):修改包括增加和減少內存占用,例如原來的16K空間數(shù)據(jù),增加或減少1K都會造成內存浪費。大量內存碎片的存在,會造成redis實際內存使用率降低,影響性能。
三、查看內存碎片 info memory 查看redis內存使用情況,主要關注以下參數(shù) used_memory:? ? ? ? ? ? ? ? ?redis分配的內存總量單位為b used_memory_human:? ? ? redis分配的內存總量單位為M used_memory_rss:? ? ? ? ? ?redis向操作系統(tǒng)申請的內存總量單位為b used_memory_rss_human: redis向操作系統(tǒng)申請的內存總量單位為Mmem_fragmentation_ratio:? ? ?內存碎片率 mem_allocator:jemalloc-5.1.0 內存分配器
mem_fragmentation_ratio計算公式為:used_memory_rss/used_memory?該值大于1但小于1.5。這種情況是合理的。該值過高時考慮清理內存,例如該值大于1.5表示有50%空間浪費,需要清理內存碎片。
四、內存碎片清理 內存碎片清理,就是將不連續(xù)的內存空間重新整理為連續(xù)空間,由于redis是單線程,在清理過程中會造成堵塞,降低性能??赏ㄟ^以下三種方式清理:1.手動清理內存碎片 memory purge 只支持jemalloc內存分配器
2.自動清理 修改redis.conf配置文件 activedefrag yes 開啟自動清理內存碎片,命令開啟:config set activedefrag yes active-defrag-ignore-bytes 100mb 內存碎片的字節(jié)數(shù)達到100M時開始清理 active-defrag-threshold-lower 10 內存碎片空間占操作系統(tǒng)分配給redis的總空間比例達到 10% 時開始清理 active-defrag-ignore-bytes與active-defrag-threshold-lower 兩個條件同時滿足會觸發(fā)內存碎片清理,當有一個不滿足則停止清理 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才會進行自動清理----以上參數(shù)默認注釋----
3.重啟redis
柚子快報激活碼778899分享:緩存 Redis 內存碎片
好文閱讀
本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。