memcached slab allocator分配機制
slab allocator的基本原理是按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以完全解決記憶體碎片問題。
slab allocation的原理相當簡單,就是將分配的記憶體分割成各種尺寸的塊(chunk),並把尺寸相同的塊分成組(chunk的集合)
slab allocation快取原理:
memcached根據收到資料的大小,選擇最合適資料大小的slab
memcached中儲存著slab內空閒chunk的列表
根據該列表選擇chunk,然後將資料快取與其中
memcached記憶體管理:
1.記憶體的碎片化
如果用c語言直接malloc,free來向作業系統申請和釋放記憶體時,在不斷的申請和釋放過程中,形成了一些很小的記憶體片斷,無法再使用,這種空閒,但無法利用的記憶體現象,稱為記憶體的碎片化
2.memcache是如何克服記憶體的碎片化的?
memcached用slab allcoator機制來管理記憶體
基本原理:預告把記憶體劃分成數個slab倉庫,各倉庫切分成不同尺寸的小塊,需要記憶體時,判斷記憶體的大小,為其選取合理的塊
警示:如果有100byte的內容要存,但是122大小的倉庫中的chunk滿了,這時memcached不會去找更大的chunk去儲存,而是把122倉庫的舊資料踢掉
3.對於固定大小的chunk,也會有浪費的,如何緩解
對於特定的**,可以長期的統計**內快取資料,按照**的特點,設定chunk的大小
4.一般而言,觀察快取資料大小的變化規律,設定合理的生長因子,grow factor,預設是1.25倍
C C 記憶體分配機制
1.c語言中的記憶體機制 在c語言中,記憶體主要分為如下5個儲存區 1 棧 stack 位於函式內的區域性變數 包括函式實參 由編譯器負責分配釋放,函式結束,棧變數失效。2 堆 heap 由程式設計師用malloc calloc realloc分配,free釋放。如果程式設計師忘記free了,則會造...
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並不是將所有大小的資料都放在一...