Redis內存碎片優化參數


info memory參數簡介

    used_memory_human:262.89M
    used_memory_rss:267489280
    mem_fragmentation_ratio:0.97

(Redis在編譯時便會指定內存分配器;內存分配器可以是 libc 、jemalloc或者tcmalloc,默認是jemalloc。)

used_memory:Redis分配器分配的內存總量(單位是字節),包括使用的虛擬內存(即swap);used_memory_human:以人類可讀的格式返回 Redis 分配的內存總量。
used_memory_rss:Redis進程占據操作系統的內存(單位是字節),與top及ps命令看到的值是一致的;除了分配器分配的內存之外,used_memory_rss還包括進程運行本身需要的內存、內存碎片等,但是不包括虛擬內存。

因此,used_memory和used_memory_rss,前者是從Redis角度得到的量,后者是從操作系統角度得到的量。二者之所以有所不同,一方面是因為內存碎片和Redis進程運行需要占用內存,使得前者可能比后者小,另一方面虛擬內存的存在,使得前者可能比后者大。

Redis內存碎片率的參數 mem_fragmentation_ratio:由於在實際應用中,Redis的數據量會比較大,此時進程運行占用的內存與Redis數據量和內存碎片相比,都會小得多,ratio指數>1表明有內存碎片,越大表明越多,<1表明正在使用虛擬內存,虛擬內存其實就是硬盤,性能比內存低得多,這是應該增強機器的內存以提高性能。一般來說,mem_fragmentation_ratio的數值在1 ~ 1.5之間是比較健康的。

內存碎片清理方法

1、重啟Redis服務;

2、使用指令來手動回收內存碎片。

自動內存碎片整理相關參數

    config set activedefrag yes 自動(實時)碎片整理

允許Redis服務器壓縮內存中小數據分配和數據釋放之間的空間,從而允許回收內存,官方默認設置內存碎片率大於10%且內存碎片大小超過100mb開始回收。

    #Enabled active defragmentation
    #碎片整理總開關
    #activedefrag yes

    #Minimum amount of fragmentation waste to start active defrag
    #當碎片達到 100mb 時,開啟內存碎片整理
     active-defrag-ignore-bytes 100mb

    #Minimum percentage of fragmentation to start active defrag
    #當碎片超過 10% 時,開啟內存碎片整理
    active-defrag-threshold-lower 10

    #Maximum percentage of fragmentation at which we use maximum effort
    #內存碎片超過 100%,則盡最大努力整理
    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

PS:自動內存回收會使Redis集群的響應變高,因為內存碎片整理是在主線程中執行的,通過源碼發現,內存碎片整理操作會 scan (通過迭代進行)整個 redis 節點,並進行內存復制、轉移等操作,因為 redis 是單線程的,所以會導致 redis 性能下降(通過調整相關配置可以控制內存整理對 redis 集群的影響)。

參數詳細介紹:

(1)調整active-defrag-ignore-bytes和active-defrag-threshold-lower

當兩個條件都滿足時,則會進入內存碎片整理邏輯,這兩個參數僅用來判斷是否進入內存碎片整理邏輯,如果將碎片率或碎片大小調大至一個能接受的閾值,redis 不進行內存碎片整理,則不會對集群有過多的影響(注:frag_pct 是從 jemalloc 獲取的,不能完全依靠info中獲取的碎片值)。

(2)調整active-defrag-cycle-min和active-defrag-cycle-max

這兩個參數是占用主線程資源比率的上下限,如果想保證內存碎片整理功能不過度影響 redis 集群性能,則需要仔細斟酌着兩個參數的配置,通過觀察內存整理時的耗時、資源占用、redis響應等情況發現,當資源占用越多時,內存碎片整理力度越大,時間越短,當然對redis性能的影響也更大。

總結:通過active-defrag-ignore-bytes和active-defrag-threshold-lower來控制是否進行內存碎片整理,通過active-defrag-cycle-min和active-defrag-cycle-max來控制整理內存碎片的力度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM