探尋 Redis 記憶體詭異增長的元凶

2021-08-28 11:06:33 字數 1030 閱讀 6928

一、現象

1. 記憶體組成

上圖中的記憶體統計的是redis的info memory命令中的used_memory屬性,例如:

redis> info memory# memoryused_memory:9195978072used_memory_human:8.56gused_memory_rss:9358786560used_memory_peak:10190212744used_memory_peak_human:9.49gused_memory_lua:38912mem_fragmentation_ratio:1.02mem_allocator:jemalloc-3.6.0每個屬性的詳細說明

屬性名屬性說明

used_memory

redis 分配器分配的記憶體量,也就是實際儲存資料的記憶體總量

used_memory_human

以可讀格式返回 redis 使用的記憶體總量

used_memory_rss

從作業系統的角度,redis程序占用的總物理記憶體

used_memory_peak

記憶體分配器分配的最大記憶體,代表used_memory的歷史峰值

used_memory_peak_human

以可讀的格式顯示記憶體消耗峰值

used_memory_lua

lua引擎所消耗的記憶體

mem_fragmentation_ratio

used_memory_rss /used_memory比值,表示記憶體碎片率

mem_allocator

redis 所使用的記憶體分配器。預設: jemalloc

計算公式如下:

used_memory = 自身記憶體+物件記憶體+緩衝記憶體+lua記憶體used_rss = used_memory + 記憶體碎片如下圖所示:

詭異的valgrind記憶體洩漏問題

如下,很簡單的幾行c include include struct meminfo t attribute packed,aligned 1 struct meminfo t minfo 2 int main 編譯執行後,如果在第16行之後,sleep 時按下ctrl c強制結束程式,valgrin...

redis生成自增長的ID

當我們web系統處於初期系統的時候,使用者量比較小,我們的資料庫的資料生成主鍵的時候可以採用increment自增策略,簡單的做id的唯一生成器,這種模式我們的web伺服器不需要做額外的操作就可以保證資料庫中主鍵是唯一的.但是隨著業務量和使用者量增長,我們就會做web集群和資料庫集群 如下圖所示 在...

記憶體探尋1之 值型別和引用型別的記憶體分配機制

string物件和值型別的記憶體分配機制 同樣由前延伸,上上篇 由string型別分析,所產生的對引數傳遞之惑的解答 中,最後提及,如果將引用型別的按值傳遞和按引用傳遞,用託管堆表示,則更具說服力。在此附圖說明 如果印象模糊,可回看文章 由上兩圖可以看到 1.在圖1 即上面圖 當在按值傳遞引用型別引...