Memcache記憶體配置機制

來源:互聯網
上載者:User
page(頁)為記憶體配置的最小單位

Memcached 的記憶體配置以page為單位,預設情況下一個page是1M,可以通過-I參數在啟動時指定。如果需要申請記憶體時,memcached會劃分出一個新的 page並分配給需要的slab地區。page一旦被分配在重啟前不會被回收或者重新分配

Slabs(層)劃分資料空間

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

Chunk(塊)才是存放快取資料的單位。

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

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數組。

Memcached記憶體配置策略。

綜合上面的介紹,memcached的記憶體配置策略就是:按slab需求分配page,各slab按需使用chunk儲存。

這裡有幾個特點要注意:

  • Memcached分配出去的page不會被回收或者重新分配
  • Memcached申請的記憶體不會被釋放
  • slab閒置chunk不會借給任何其他slab使用
本文轉自:http://blog.csdn.net/u013927110/article/details/47024499

以上就介紹了Memcache記憶體配置機制,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.