Memcache 記憶體分配策略

2021-08-28 11:23:22 字數 812 閱讀 5501

memcached預設採用了名為slab allocator的機制分配和管理記憶體。

在該機制出現以前,記憶體的分配是通過對所有記錄簡單的進行mallocfree來進行了。但是這種方式會導致記憶體碎片化嚴重,加重作業系統記憶體管理器的負擔。slab allocator就是位了解決該問題而誕生的。

slab allocator的基本原理是:按照預先規定的大小,將分配的記憶體以page為單位,預設情況下乙個page是1m(可以通過-i引數在啟動memcached的時候指定),分割成各種尺寸的塊(chunk),並把尺寸相同的塊(chunk)分成組(chunk集合)。如果需要申請記憶體時,memcached會劃分出乙個新的page並分配給需要的slab區域。

page一旦被分配,在memcached重啟前不會被**或者重新分配,以解決記憶體碎片問題。

slab的記憶體分配具體過程如下:

memcached在啟動的時候通過-m引數指定最大記憶體,但是這個不會一啟動就占用完,而是逐步分配給各個slab的。如果乙個新的資料要被存放,首選選擇乙個合適的slab,然後檢視該slab是否還有空閒的chunk,如果有則直接存放進去;如果沒有則要進行申請,slab申請記憶體是以page為單位的,無論大小為多少,都會有1m大小的page被分配給該slab。

申請到page後,slab會將這個page的記憶體按chunk的大小進行切分,這樣就變成了乙個chunk的組,再從這個chunk組中選擇乙個用於儲存資料。

Memcache記憶體分配機制

1.page 頁 為記憶體分配的最小單位 memcached 的記憶體分配以page為單位,預設情況下乙個page是1m,可以通過 i引數在啟動時指定。如果需要申請記憶體時,memcached會劃分出乙個新的page並分配給需要的slab區域。page一旦被分配在重啟前不會被 或者重新分配 2.sl...

Memcache記憶體分配機制

memcached 的記憶體分配以page為單位,預設情況下乙個page是1m,可以通過 i引數在啟動時指定。如果需要申請記憶體時,memcached會劃分出乙個新的 page並分配給需要的slab區域。page一旦被分配在重啟前不會被 或者重新分配 memcached並不是將所有大小的資料都放在一...

memcache記憶體分配機制

memcached的記憶體分配沒有用到c語言中自帶的malloc函式,因為這個函式分配記憶體的時候效率很低,對於這種要求快速響應,對效率要求非常高的快取軟體來說非常不合適。memcached用的是自己的一套記憶體分配方法,叫做slab allocation。64位的作業系統能分配 2gb 以上的記憶...