1、記憶體統計
檢視記憶體:
127.0
.0.1
:6379
> info memory
# memory
used_memory:
689408
used_memory_human:
673.25k
used_memory_rss:
652472
used_memory_rss_human:
637.18k
used_memory_peak:
766384
used_memory_peak_human:
748.42k
total_system_memory:
0total_system_memory_human:
0bused_memory_lua:
37888
used_memory_lua_human:
37.00k
maxmemory:
0maxmemory_human:
0bmaxmemory_policy:noeviction
mem_fragmentation_ratio:
0.95
mem_allocator:jemalloc-
3.6.0
used_memory:redis分配器分配的記憶體總量(單位是位元組),包括虛擬記憶體(swap,使用硬碟代替記憶體)
used_memory_rss:redis程序佔據作業系統的記憶體。除了分配器分配的記憶體,還包括了程序執行本身需要的記憶體、記憶體碎片等,但不包含虛擬記憶體。
used_memory_peak:記憶體使用的最大值。use_memory
used_memory_lua:lua引起消耗的記憶體大小
mem_fragmentation_ratio:記憶體碎片率(used_memory_rss/used_memory)。如果該值大於1,說明有部分記憶體並沒有用於資料儲存,而是被記憶體碎片所消耗,值越大,記憶體碎片就越嚴重。如果值小於1,這種情況一般是作業系統把redis記憶體交換(swap)到硬碟所致,由於硬碟效能遠遠低於記憶體,會導致redis的效能變得很差。
mem_allocator:redis使用的記憶體分配器,在編譯時指定,可以值有libc 、jemalloc或者tcmalloc,預設是jemalloc
物件記憶體:儲存使用者的所有資料。redis 所有的資料都採用 key-value 資料型別,每次建立鍵值對時,至少建立兩個型別物件:key 物件和 value 物件
緩衝記憶體:客戶端緩衝、複製積壓緩衝、aof重寫緩衝
客戶端緩衝:分為輸入和輸出緩衝區。
輸入緩衝區:無法控制,最大空間為1g,超過斷開連線。
輸出緩衝區:可以通過client-output-buffer-limit設定。
複製積壓緩衝區:用於實現主從的部分複製功能。可以通過repl-backlog-size設定,預設1m。
aof重寫緩衝區:用於儲存aof重寫期間的寫命令
記憶體碎片:記憶體碎片是redis在分配、**物理記憶體過程中產生的。例如,如果對資料的更改頻繁,而且資料之間的大小相差很大,可能導致redis釋放的空間在物理記憶體中並沒有釋放,但redis又無法有效利用,這就形成了記憶體碎片。記憶體碎片不會統計在used_memory中。
如果redis伺服器中的記憶體碎片已經很大,可以通過安全重啟的方式減小記憶體碎片:因為重啟之後,redis重新從備份檔案中讀取資料,在記憶體中進行重排,為每個資料重新選擇合適的記憶體單元,減小記憶體碎片。
C 語言學習記錄 19 記憶體的分割槽模型
c 在執行時,將記憶體從大方向上劃分為四個區域,在這些不同區域中存放的資料,會被賦予不同的生命週期,以便我們靈活程式設計。1.區 由作業系統管理,用於存放函式體的二進位制 2.全域性區 用於存放全域性變數和靜態變數以及常量 3.棧區 由編譯器自動分配 釋放,存放函式的引數值和區域性變數等 4.堆區 ...
型別記憶體模型(物件記憶體模型)
型別的記憶體模型的3個問題 1 包含什麼 附加資訊 2 怎麼布局 記憶體對齊 3 使用場景 怎麼使用附加資訊 除了包含結構型別的顯式成員變數外,型別記憶體模型需要解決附加資訊的引入問題 1 附加資訊 opaque 有哪些 型別資訊 函式資訊 繼承資訊 記憶體計數等 2 為什麼有附加資訊 1 解決多型...
C 基礎 記憶體模型記憶體分割槽模型
區 存放函式體的二進位制 由作業系統進行管理 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配釋放,存放函式的引數值 區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 存放cpu執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...