搜尋
首頁資料庫Redis怎麼清理Redis記憶體碎片

什麼是Redis記憶體碎片?

作業系統的剩餘空間總量足夠,但申請一塊N位元組連續位址的空間時,剩餘記憶體空間中沒有大小為N位元組的連續空間,那麼這些剩餘記憶體空間中,小於N位元組的連續記憶體空間就是記憶體碎片。

Redis記憶體碎片是如何形成的?

記憶體碎片形成有內部原因和外部原因:

  • 內部原因:記憶體分配器的分配策略決定作業系統無法做到「按需分配」。

    • Redis使用libc、jemalloc、tcmalloc多種記憶體分配器來分配內存,預設使用jemalloc。

    • 記憶體分配器是按照固定大小來分配記憶體空間,而不是完全按照應用程式申請的記憶體大小來分配。

    • 以jemalloc為例,是依照一系列固定的大小劃分記憶體空間,例如8位元組、16位元組、32位元組、...、2KB、4KB等。 Jemalloc會分配與程式申請記憶體最接近的固定大小的空間。

  • 外部原因:鍵值對大小不一樣,且鍵值對可以被修改和刪除。

    • Redis申請記憶體空間分配時,對於大小不一的記憶體空間需求,記憶體分配器依照固定大小分配記憶體空間,分配的記憶體空間一般都會比申請的記憶體空間大一些,這會產生一定的記憶體碎片。

    • 鍵值對會被修改和刪除,會導致空間的擴容和釋放。

如何判斷Redis是否有記憶體碎片?

DAS透過Redis提供的INFO命令,查詢記憶體使用的詳細信息,命令如下:

INFO memory
# Memory
used_memory:350458970752
used_memory_human:326.39G
used_memory_rss:349066919936
used_memory_rss_human:325.09G
…
mem_fragmentation_ratio:1.00
  • used_memory:表示Redis為了保存數據實際申請使用的記憶體空間。

  • used_memory_rss:表示作業系統實際分配給Redis的實體記憶體空間,其中包含了記憶體空間碎片。

  • mem_fragmentation_ratio指當前Redis的記憶體碎片率。計算公式:mem_fragmentation_ratio=used_memory_rss/used_memory

    • mem_fragmentation_ratio大於等於1但小於等於1.5,這種情況是合理的。

    • mem_fragmentation_ratio大於1.5,表示記憶體碎片率已經超過了50%。

如何清理記憶體碎片?

一個「簡單粗暴」的方法是重啟Redis實例。但是這個方法會帶來兩個後果:

  • 如果Redis中的資料沒有持久化,資料會遺失;

  • 無論Redis數據是否被持久化,恢復資料時都需採用AOF或RDB方式,而復原所需時間取決於AOF或RDB檔案的大小。且如果只有一個Redis實例,則復原階段無法提供服務。

 那有沒有更好的方法呢?有的,從4.0-RC3版本以後,Redis本身提供了一種記憶體碎片自動清理的方法。

記憶體碎片自動清理

記憶體碎片清理,簡單來說,就是「搬家讓位,合併空間」。

當有資料把一塊連續的記憶體空間分割成好幾塊不連續的空間時,作業系統會把資料拷貝到另外,而原來不連續的記憶體空間就變成連續的記憶體空間了。

但是碎片清理是有代價的。移動多份資料到新位置並釋放原有空間是作業系統必須做的,但這個過程會花費時間。另外在資料拷貝時,會阻塞Redis,降低效能。

如何緩解這個問題?

Redis專門為自動記憶體碎片清理機制提供參數設定。可以透過設定參數,來控制碎片清理的開始和結束時機,以及佔用的CPU比例,從而減少碎片清理對Redis請求處理的效能影響。

首先,開啟自動記憶體碎片清理:

config set activedefrag yes
然後,設定觸發記憶體清理的條件:

  • active- defrag-ignore-bytes 100mb:表示記憶體碎片的位元組數達到100MB時,開始清理;

  • ##active-defrag-threshold-lower 10:表示記憶體碎片空間佔作業系統分配給Redis的總空間比例達到10%時,開始清理。

最後,控制清理作業佔用CPU時間比例的上方、下限:

  • active-defrag-cycle-min 25: 表示自動清理過程所用CPU時間的比例不低於25%,保證清理能正常進行;

  • #active-defrag-cycle-max 75:表示自動清理過程所用CPU時間的比例不高於75%,一旦超過,就停止清理,從而避免在清理時,大量的記憶體拷貝阻塞Redis,導致反應延遲升高。

  • #

以上是怎麼清理Redis記憶體碎片的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
REDIS:超越SQL- NOSQL的觀點REDIS:超越SQL- NOSQL的觀點May 08, 2025 am 12:25 AM

Redis超越SQL數據庫的原因在於其高性能和靈活性。 1)Redis通過內存存儲實現極快的讀寫速度。 2)它支持多種數據結構,如列表和集合,適用於復雜數據處理。 3)單線程模型簡化開發,但高並發時可能成瓶頸。

REDIS:與傳統數據庫服務器的比較REDIS:與傳統數據庫服務器的比較May 07, 2025 am 12:09 AM

Redis在高並發和低延遲場景下優於傳統數據庫,但不適合複雜查詢和事務處理。 1.Redis使用內存存儲,讀寫速度快,適合高並發和低延遲需求。 2.傳統數據庫基於磁盤,支持複雜查詢和事務處理,數據一致性和持久性強。 3.Redis適用於作為傳統數據庫的補充或替代,但需根據具體業務需求選擇。

REDIS:功能強大的內存數據存儲的簡介REDIS:功能強大的內存數據存儲的簡介May 06, 2025 am 12:08 AM

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis主要是數據庫嗎?Redis主要是數據庫嗎?May 05, 2025 am 12:07 AM

Redis主要是一個數據庫,但它不僅僅是數據庫。 1.作為數據庫,Redis支持持久化,適合高性能需求。 2.作為緩存,Redis提升應用響應速度。 3.作為消息代理,Redis支持發布-訂閱模式,適用於實時通信。

REDIS:數據庫,服務器還是其他?REDIS:數據庫,服務器還是其他?May 04, 2025 am 12:08 AM

redisisamultifaceTedToolThatServesAsAdatabase,server和more.itfunctionsasanin-memorydatastrustore,supportsvariousDataStructures,and CanbeusedAsacache,MessageBroker,sessionStorage,sessionStorage,sessionstorage,andford forderibedibedlocking。

REDIS:揭示其目的和關鍵應用程序REDIS:揭示其目的和關鍵應用程序May 03, 2025 am 12:11 AM

Redisisanopen-Source,內存內部的庫雷斯塔氏菌,卡赫和梅斯吉級,excellingInsPeedAndVersatory.itiswidelysusedforcaching,Real-Timeanalytics,Session Management,Session Managements,and sessighterboarderboarderboardobboardotoitsssupportfortfortfortfortfortfortfortfortorvortfortfortfortfortfortforvortfortforvortforvortforvortfortforvortforvortforvortforvortdatastherctuct anddatataCcessandcessanddataaCces

REDIS:鍵值數據存儲的指南REDIS:鍵值數據存儲的指南May 02, 2025 am 12:10 AM

Redis是一個開源的內存數據結構存儲,用作數據庫、緩存和消息代理,適合需要快速響應和高並發的場景。 1.Redis使用內存存儲數據,提供微秒級的讀寫速度。 2.它支持多種數據結構,如字符串、列表、集合等。 3.Redis通過RDB和AOF機制實現數據持久化。 4.使用單線程模型和多路復用技術高效處理請求。 5.性能優化策略包括LRU算法和集群模式。

REDIS:緩存,會話管理等REDIS:緩存,會話管理等May 01, 2025 am 12:03 AM

Redis的功能主要包括緩存、會話管理和其他功能:1)緩存功能通過內存存儲數據,提高讀取速度,適用於電商網站等高頻訪問場景;2)會話管理功能在分佈式系統中共享會話數據,並通過過期時間機制自動清理;3)其他功能如發布-訂閱模式、分佈式鎖和計數器,適用於實時消息推送和多線程系統等場景。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具