19 記憶體模型

2021-10-25 01:49:24 字數 1881 閱讀 2640

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執行的機器指令,區是共享的,只有乙份 是唯讀的。存放全域性變數 定義...