memcached預設採用了名為slab allocator
的機制分配和管理記憶體。
在該機制出現以前,記憶體的分配是通過對所有記錄簡單的進行malloc
和free
來進行了。但是這種方式會導致記憶體碎片化嚴重,加重作業系統記憶體管理器的負擔。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 以上的記憶...