1. 程式人生 > >Memcache 記憶體分配策略

Memcache 記憶體分配策略

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組中選擇一個用於儲存資料。