婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > redis內存空間效率問題的深入探究

redis內存空間效率問題的深入探究

熱門標簽:宿遷便宜外呼系統平臺 魔獸2青云地圖標注 北京400電話辦理收費標準 超呼電話機器人 鄭州人工智能電銷機器人系統 日本中國地圖標注 貴州電銷卡外呼系統 十堰營銷電銷機器人哪家便宜 山東外呼銷售系統招商

前言

在使用redis時,我們會遇到一個問題,數據刪除后,數據量已經不大了,但是使用top命令查看,還會發現redis占用了很對內存。實際上,因為數據刪除后,redis釋放內存由內存分配器管理,不會立刻返回給操作系統。所以,操作系統仍然記錄著給redis分配了大量的內存

這往往會伴隨一個潛在的風險點:Redis 釋放的內存空間可能并不是連續的,那么,這些不連續的內存空間很有可能處于一種閑置的狀態。這就會導致一個問題:雖然有空閑空間,Redis 卻無法用來保存數據,不僅會減少 Redis 能夠實際保存的數據量,還會降低 Redis 運行機器的成本回報率。

什么是內存碎片

通常情況下,內存空間利用率低,往往是因為操作系統發生了比較嚴重的內存碎片,那么什么是內存碎片呢?可以將內存看成是高鐵上的作為,連續的空間相當于連座,內存碎片可以看成一個個零散的作為,如果你是3個人出行,火車上沒有三個座位連著的,那么你就沒法買到合適的作為,可能需要換一輛車

內存類似,如果需要申請一個N字節的連續空間,但是沒有這么大的連續空間,那么,這些剩余空間就是內存碎片,redis內存碎片是什么原因導致的呢,了解了原因才有可能比較好的解決

內存碎片形成的原因

一般來說內存碎片形成的原因有兩個,內因是操作系統的內存分配機制,外因是redis的負載特征

內因:內存分配器策略

內存分配器的分配策略就決定了操作系統無法做到“按需分配”。這是因為,內存分配器一般是按固定大小來分配內存,而不是完全按照應用程序申請的內存空間大小給程序分配。

Redis 可以使用 libc、jemalloc、tcmalloc 多種內存分配器來分配內存,默認使用 jemalloc。接下來,我就以 jemalloc 為例,來具體解釋一下。其他分配器也存在類似的問題。

jemalloc 的分配策略之一,是按照一系列固定的大小劃分內存空間,例如 8 字節、16 字節、32 字節、48 字節,…, 2KB、4KB、8KB 等。當程序申請的內存最接近某個固定值時,jemalloc 會給它分配相應大小的空間。

外因:鍵值對大小不一樣和刪改操作

redis通常作為公共緩存和鍵值數據庫對外提供服務,所以對于不同大小的數據,redis申請內存空間大小不一,這是一個外因。

因為內存分配是按照固定大小分配,所以內存空間一般都會比申請的空間大一些,所以本身就會有一些內存碎片,降低內存空間存儲效率。

第二個外因是,這些數據會被刪除和修改,會導致空間空間擴充和釋放,具體來說,一方面,如果修改后的鍵值對變大或變小了,就需要占用額外的空間或者釋放不用的空間。另一方面,刪除的鍵值對就不再需要內存空間了,此時,就會把空間釋放出來,形成空閑空間

一開始,應用 A、B、C、D 分別保存了 3、1、2、4 字節的數據,并占據了相應的內存空間。然后,應用 D 刪除了 1 個字節,這個 1 字節的內存空間就空出來了。緊接著,應用 A 修改了數據,從 3 字節變成了 4 字節。為了保持 A 數據的空間連續性,操作系統就需要把 B 的數據拷貝到別的空間,比如拷貝到 D 剛剛釋放的空間中。此時,應用 C 和 D 也分別刪除了 2 字節和 1 字節的數據,整個內存空間上就分別出現了 2 字節和 1 字節的空閑碎片。如果應用 E 想要一個 3 字節的連續空間,顯然是不能得到滿足的。因為,雖然空間總量夠,但卻是碎片空間,并不是連續的。

好了,到這里,我們就知道了造成內存碎片的內外因素,其中,內存分配器策略是內因,而 Redis 的負載屬于外因,包括了大小不一的鍵值對和鍵值對修改刪除帶來的內存空間變化。

如何判斷是否有內存碎片

Redis 是內存數據庫,內存利用率的高低直接關系到 Redis 運行效率的高低。為了讓用戶能監控到實時的內存使用情況,Redis 自身提供了 INFO 命令,可以用來查詢內存使用的詳細信息,命令如下:

INFO memory
# Memory
used_memory:1073741736
used_memory_human:1024.00M
used_memory_rss:1997159792
used_memory_rss_human:1.86G
…
mem_fragmentation_ratio:1.86O memory

INFO memory
# Memory
used_memory:1073741736
used_memory_human:1024.00M
used_memory_rss:1997159792
used_memory_rss_human:1.86G
…
mem_fragmentation_ratio:1.86

這里有一個 mem_fragmentation_ratio 的指標,它表示的就是 Redis 當前的內存碎片率。那么,這個碎片率是怎么計算的呢?其實,就是上面的命令中的兩個指標 used_memory_rss 和 used_memory 相除的結果。

mem_fragmentation_ratio = used_memory_rss/ used_memory

used_memory_rss 是操作系統實際分配給 Redis 的物理內存空間,里面就包含了碎片;而 used_memory 是 Redis 為了保存數據實際申請使用的空間。

我簡單舉個例子。例如,Redis 申請使用了 100 字節(used_memory),操作系統實際分配了 128 字節(used_memory_rss),此時,mem_fragmentation_ratio 就是 1.28。

那么,知道了這個指標,我們該如何使用呢?在這兒,我提供一些經驗閾值:

  • mem_fragmentation_ratio大于1小于1.5。這種情況是合理的。這是因為,剛才我介紹的那些因素是難以避免的。畢竟,內因的內存分配器是一定要使用的,分配策略都是通用的,不會輕易修改;而外因由 Redis 負載決定,也無法限制。所以,存在內存碎片也是正常的。
  • mem_fragmentation_ratio大于1.5。 這表明內存碎片率已經超過了 50%。一般情況下,這個時候,我們就需要采取一些措施來降低內存碎片率了。

如何清理內存碎片

當 Redis 發生內存碎片后,一個“簡單粗暴”的方法就是重啟redis實例,當然這并不是一個優雅的方法,重啟會帶來一些問題

  • 如果數據沒有持久化,那么數據會丟失
  • 如果數據持久化了,我們需要通過AOF或RDB進行恢復,恢復時長取決于AOF或RDB的大小,如果只有一個實例,在恢復階段無法提供服務。

幸運的是,從 4.0-RC3 版本以后,Redis 自身提供了一種內存碎片自動清理的方法,我們先來看這個方法的基本機制。還是通過一張圖來看下

在進行碎片清理前,這段 10 字節的空間中分別有 1 個 2 字節和 1 個 1 字節的空閑空間,只是這兩個空間并不連續。操作系統在清理碎片時,會先把應用 D 的數據拷貝到 2 字節的空閑空間中,并釋放 D 原先所占的空間。然后,再把 B 的數據拷貝到 D 原來的空間中。這樣一來,這段 10 字節空間的最后三個字節就是一塊連續空間了。到這里,碎片清理結束。

需要注意:碎片清理事由代價的,操作系統需要把多份數據拷貝到新位置,把原有空間釋放出來,這會帶來時間開銷。因為 Redis 是單線程,在數據拷貝時,Redis 只能等著,這就導致 Redis 無法及時處理請求,性能就會降低。而且,有的時候,數據拷貝還需要注意順序,就像剛剛說的清理內存碎片的例子,操作系統需要先拷貝 D,并釋放 D 的空間后,才能拷貝 B。這種對順序性的要求,會進一步增加 Redis 的等待時間,導致性能降低。

那么,有什么辦法可以盡量緩解這個問題嗎?這就要提到,Redis 專門為自動內存碎片清理功機制設置的參數了。我們可以通過設置參數,來控制碎片清理的開始和結束時機,以及占用的 CPU 比例,從而減少碎片清理對 Redis 本身請求處理的性能影響。

首先,Redis 需要啟用自動內存碎片清理,可以把 activedefrag 配置項設置為 yes,命令如下:

config set activedefrag yes

這個命令只是啟用了自動清理功能,但是,具體什么時候清理,會受到下面這兩個參數的控制。這兩個參數分別設置了觸發內存清理的一個條件,如果同時滿足這兩個條件,就開始清理。在清理的過程中,只要有一個條件不滿足了,就停止自動清理。

  • active-defrag-ignore-bytes 100mb:表示內存碎片數量達到100MB時,開始清理
  • active-defrag-threshold-lower 10:表示內存碎片空間占操作系統給redis分配空間的10%時開始清理

為了盡可能減少碎片清理對 Redis 正常請求處理的影響,自動內存碎片清理功能在執行時,還會監控清理操作占用的 CPU 時間,而且還設置了兩個參數,分別用于控制清理操作占用的 CPU 時間比例的上、下限,既保證清理工作能正常進行,又避免了降低 Redis 性能。這兩個參數具體如下:

  • active-defrag-cycle-min 25:表示自動清理過程cpu時間筆記不低于25%,保證清理能正常開展
  • active-defrag-cycle-max 75:表示自動清理過程所用 CPU 時間的比例不高于 75%,一旦超過,就停止清理,從而避免在清理時,大量的內存拷貝阻塞 Redis,導致響應延遲升高。

自動內存碎片清理機制在控制碎片清理啟停的時機上,既考慮了碎片的空間占比、對 Redis 內存使用效率的影響,還考慮了清理機制本身的 CPU 時間占比、對 Redis 性能的影響。而且,清理機制還提供了 4 個參數,讓我們可以根據實際應用中的數據量需求和性能要求靈活使用,建議你在實踐中好好地把這個機制用起來。

總結

到此這篇關于redis內存空間效率問題的文章就介紹到這了,更多相關redis內存空間效率內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • redis 限制內存使用大小的實現
  • redis 使用lettuce 啟動內存泄漏錯誤的解決方案
  • 淺談內存耗盡后Redis會發生什么
  • 一次關于Redis內存詭異增長的排查過程實戰記錄
  • 淺談redis內存數據的持久化方式
  • 內存型數據庫Redis持久化小結
  • 降低PHP Redis內存占用
  • Redis教程(十四):內存優化介紹
  • 詳解Redis瘦身指南

標簽:吉安 大慶 果洛 楊凌 臺州 江蘇 北京 朝陽

巨人網絡通訊聲明:本文標題《redis內存空間效率問題的深入探究》,本文關鍵詞  redis,內存,空間,效率,問,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《redis內存空間效率問題的深入探究》相關的同類信息!
  • 本頁收集關于redis內存空間效率問題的深入探究的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本欧美在线观看| 国产精品女主播在线观看| 欧美日韩一级二级| 亚洲天堂网中文字| 成人av在线一区二区三区| 精品日产卡一卡二卡麻豆| 亚洲高清久久久| 欧美系列亚洲系列| 亚瑟在线精品视频| 欧洲日韩一区二区三区| 亚洲国产日韩综合久久精品| 欧美色综合久久| 日韩精品久久久久久| 日韩欧美成人激情| 国产综合色产在线精品| 国产精品理论在线观看| 欧美午夜电影一区| 精品制服美女久久| 日韩美女啊v在线免费观看| 91毛片在线观看| 日韩avvvv在线播放| 久久亚洲精精品中文字幕早川悠里| 国产高清视频一区| 亚洲三级久久久| 欧美一级高清大全免费观看| 国产999精品久久久久久绿帽| 亚洲欧洲av在线| 欧美精品乱码久久久久久按摩| 国产麻豆一精品一av一免费| 中文字幕日韩精品一区| 91麻豆精品国产91久久久久久| 精品无人码麻豆乱码1区2区 | 国内精品不卡在线| 日本一二三不卡| 欧美色视频一区| 国产精品69毛片高清亚洲| 一区二区三区在线视频免费| 久久综合九色综合97婷婷女人| 99久久99久久精品国产片果冻| 免费美女久久99| 亚洲精选视频在线| 26uuu成人网一区二区三区| 91九色02白丝porn| 成人综合在线观看| 久久精品国产在热久久| 三级不卡在线观看| 亚洲精品大片www| 国产精品免费av| 精品对白一区国产伦| 欧美在线视频全部完| 成人av在线看| 国产白丝网站精品污在线入口| 久久精品国产亚洲5555| 天堂va蜜桃一区二区三区| 亚洲视频一区二区免费在线观看| 日韩欧美国产午夜精品| 欧美美女喷水视频| 欧美在线视频全部完| 色嗨嗨av一区二区三区| 成人18精品视频| 成人免费观看男女羞羞视频| 国产呦精品一区二区三区网站| 天天综合日日夜夜精品| 亚洲成人激情自拍| 天天色图综合网| 日韩av二区在线播放| 三级不卡在线观看| 日韩高清中文字幕一区| 视频一区视频二区中文| 五月婷婷激情综合网| 午夜精品免费在线观看| 亚洲夂夂婷婷色拍ww47| 亚洲在线免费播放| 午夜欧美视频在线观看| 奇米影视一区二区三区| 久久精品国产一区二区三 | 国产一区二区三区精品欧美日韩一区二区三区| 亚洲国产视频网站| 亚洲成av人片一区二区| 性欧美疯狂xxxxbbbb| 日韩成人av影视| 精品夜夜嗨av一区二区三区| 国产一区视频在线看| 国产乱国产乱300精品| 成人美女在线视频| 色综合视频在线观看| 欧美日韩视频第一区| 91精品国产欧美日韩| 欧美成人精品高清在线播放| 精品国产一区二区亚洲人成毛片| 国产午夜一区二区三区| 中文字幕一区二区三区色视频| 亚洲欧美色综合| 日本不卡一二三| 成人av在线观| 欧美精品在欧美一区二区少妇| 欧美一区二区三区视频免费| 久久久久97国产精华液好用吗| 国产精品国产精品国产专区不片| 一区二区三区在线免费播放| 日本怡春院一区二区| 成人免费三级在线| 欧美一区午夜视频在线观看| 中文字幕成人av| 日韩精品乱码av一区二区| 成人av电影在线网| 精品少妇一区二区| 亚洲精品免费电影| 久久99精品网久久| 色88888久久久久久影院野外| 日韩色在线观看| 一区二区三区在线播放| 国内外成人在线| 欧美在线免费观看亚洲| 欧美激情一区二区三区蜜桃视频| 爽好多水快深点欧美视频| 成人av电影在线| 日韩免费观看高清完整版| 亚洲男同性视频| 高清国产午夜精品久久久久久| 69精品人人人人| 一区二区三区日韩| 99久久综合国产精品| 久久久久久久国产精品影院| 亚洲高清免费视频| 欧美亚洲禁片免费| 亚洲视频在线观看一区| 成人高清视频在线| 久久久噜噜噜久久人人看| 久久福利资源站| 日韩视频一区二区三区在线播放| 亚洲午夜av在线| 在线区一区二视频| 亚洲一区二区三区四区在线| 色婷婷av久久久久久久| 一色桃子久久精品亚洲| 成人午夜激情在线| 国产精品人妖ts系列视频| 国产精品一区三区| 久久综合色一综合色88| 六月丁香婷婷久久| 欧美精品一区二区蜜臀亚洲| 美女脱光内衣内裤视频久久影院| 欧美一区二区在线视频| 日韩精品久久理论片| 555www色欧美视频| 婷婷亚洲久悠悠色悠在线播放 | 欧美成人video| 美国欧美日韩国产在线播放| 精品国产乱码久久久久久浪潮| 蜜臀av一区二区| 欧美成人精品福利| 国内成人精品2018免费看| 精品成人一区二区三区四区| 韩国欧美国产一区| 亚洲欧洲另类国产综合| 在线观看亚洲专区| 日本人妖一区二区| 久久亚洲春色中文字幕久久久| 国产乱人伦偷精品视频免下载| 国产精品视频一二三区| 91香蕉视频mp4| 午夜精品成人在线视频| 精品日韩一区二区三区| 成人av在线资源网| 香蕉乱码成人久久天堂爱免费| 欧美成人三级在线| 一本到高清视频免费精品| 免费视频最近日韩| 国产女人18毛片水真多成人如厕 | 从欧美一区二区三区| 樱桃视频在线观看一区| 欧美一区二区三区小说| 福利电影一区二区三区| 亚洲男同性恋视频| 精品国产一区二区亚洲人成毛片| 不卡电影免费在线播放一区| 天堂一区二区在线免费观看| 国产欧美精品一区二区色综合 | 久久精品男人天堂av| 欧美在线综合视频| 国产91精品一区二区| 亚洲午夜一区二区三区| 久久九九久精品国产免费直播| 欧美性xxxxxx少妇| 国产成人自拍在线| 亚洲在线一区二区三区| 久久久久久久久久电影| 欧美一区二区播放| 91黄色免费观看| 国产高清久久久| 国产做a爰片久久毛片| 日韩电影免费在线看| 亚洲欧美成aⅴ人在线观看| 欧美大片顶级少妇| 欧美日本一道本| 欧美性videosxxxxx| 91美女蜜桃在线| 成人禁用看黄a在线| 国产黄人亚洲片|