日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Memcache内存分配策略

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Memcache内存分配策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://tank.blogs.tkiicpp.com/2010/12/14/memcache%e5%86%85%e5%ad%98%e5%88%86%e9%85%8d%e7%ad%96%e7%95%a5/

一、Memcache內存分配機制

?? ? ? ?關于這個機制網上有很多解釋的,我個人的總結如下。

  1. Page為內存分配的最小單位。

    Memcached的內存分配以page為單位,默認情況下一個page是1M,可以通過-I參數在啟動時指定。如果需要申請內存時,memcached會劃分出一個新的page并分配給需要的slab區域。page一旦被分配在重啟前不會被回收或者重新分配(page ressign已經從1.2.8版移除了)

  2. Slabs劃分數據空間。

    Memcached并不是將所有大小的數據都放在一起的,而是預先將數據空間劃分為一系列slabs,每個slab只負責一定范圍內的數據存儲。如下圖,每個slab只存儲大于其上一個slab的size并小于或者等于自己最大size的數據。例如:slab 3只存儲大小介于137 到 224 bytes的數據。如果一個數據大小為230byte將被分配到slab 4中。從下圖可以看出,每個slab負責的空間其實是不等的,memcached默認情況下下一個slab的最大值為前一個的1.25倍,這個可以通過修改-f參數來修改增長比例。

  3. Chunk才是存放緩存數據的單位。

    Chunk是一系列固定的內存空間,這個大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached實際存放緩存數據的地方,因為chunk的大小固定為slab能夠存放的最大值,所以所有分配給當前slab的數據都可以被chunk存下。如果時間的數據大小小于chunk的大小,空余的空間將會被閑置,這個是為了防止內存碎片而設計的。例如下圖,chunk size是224byte,而存儲的數據只有200byte,剩下的24byte將被閑置。

  4. Slab的內存分配。

    Memcached在啟動時通過-m指定最大使用內存,但是這個不會一啟動就占用,是隨著需要逐步分配給各slab的。
    ?? ? ? ? 如果一個新的緩存數據要被存放,memcached首先選擇一個合適的slab,然后查看該slab是否還有空閑的chunk,如果有則直接存放進去;如果沒有則要進行申請。slab申請內存時以page為單位,所以在放入第一個數據,無論大小為多少,都會有1M大小的page被分配給該slab。申請到page后,slab會將這個page的內存按chunk的大小進行切分,這樣就變成了一個chunk的數組,在從這個chunk數組中選擇一個用于存儲數據。如下圖,slab 1和slab 2都分配了一個page,并按各自的大小切分成chunk數組。

  5. Memcached內存分配策略。

    綜合上面的介紹,memcached的內存分配策略就是:按slab需求分配page,各slab按需使用chunk存儲。
    這里有幾個特點要注意,

    1. Memcached分配出去的page不會被回收或者重新分配
    2. Memcached申請的內存不會被釋放
    3. slab空閑的chunk不會借給任何其他slab使用

?

?? ? ?知道了這些以后,就可以理解為什么總內存沒有被全部占用的情況下,memcached卻出現了丟失緩存數據的問題了。

總結

以上是生活随笔為你收集整理的Memcache内存分配策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。