<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    一、Memcache內(nèi)存分配機(jī)制

            關(guān)于這個(gè)機(jī)制網(wǎng)上有很多解釋的,我個(gè)人的總結(jié)如下。

    1. Page為內(nèi)存分配的最小單位。

      Memcached的內(nèi)存分配以page為單位,默認(rèn)情況下一個(gè)page是1M,可以通過(guò)-I參數(shù)在啟動(dòng)時(shí)指定。如果需要申請(qǐng)內(nèi)存時(shí),memcached會(huì)劃分出一個(gè)新的page并分配給需要的slab區(qū)

    2.  

    3.  

    4. 域。page一旦被分配在重啟前不會(huì)被回收或者重新分配(page ressign已經(jīng)從1.2.8版移除了) 

    5. Slabs劃分?jǐn)?shù)據(jù)空間。

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

    6.   

    7. Chunk才是存放緩存數(shù)據(jù)的單位。

      Chunk是一系列固定的內(nèi)存空間,這個(gè)大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached實(shí)際存放緩存數(shù)據(jù)的地方,因?yàn)閏hunk的大小固定為slab能夠存放的最大值,所以所有分配給當(dāng)前slab的數(shù)據(jù)都可以被chunk存下。如果時(shí)間的數(shù)據(jù)大小小于chunk的大小,空余的空間將會(huì)被閑置,這個(gè)是為了防止內(nèi)存碎片而設(shè)計(jì)的。例如下圖,chunk size是224byte,而存儲(chǔ)的數(shù)據(jù)只有200byte,剩下的24byte將被閑置。 

    8.  


    9.  

    10. Slab的內(nèi)存分配。

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

    11.  


    12.  

    13. Memcached內(nèi)存分配策略。

      綜合上面的介紹,memcached的內(nèi)存分配策略就是:按slab需求分配page,各slab按需使用chunk存儲(chǔ)。
      這里有幾個(gè)特點(diǎn)要注意,

      1. Memcached分配出去的page不會(huì)被回收或者重新分配
      2. Memcached申請(qǐng)的內(nèi)存不會(huì)被釋放
      3. slab空閑的chunk不會(huì)借給任何其他slab使用
         每一個(gè)slab=1M   切分的chunk個(gè)數(shù)=1M/最小的chunk大小
        下一個(gè)chunk=上一個(gè)chunk大小*增長(zhǎng)因子


     

          知道了這些以后,就可以理解為什么總內(nèi)存沒有被全部占用的情況下,memcached卻出現(xiàn)了丟失緩存數(shù)據(jù)的問題了。
    *******************
    當(dāng)存儲(chǔ)的值item大于1M的時(shí)候:

    按照官方解釋,當(dāng)大于1M時(shí),按現(xiàn)有的 slab allocation內(nèi)存分配管理機(jī)制,memcache的存取效率會(huì)下降很多,就失去了使用memcache的意義,之所以用memcache,一大原因就是它比數(shù)據(jù)庫(kù)速度快,如果失去了速度優(yōu)勢(shì),就沒意思了。
     支持大于1M的方法 官方也給出了:一個(gè)是還是使用slab allocation 機(jī)制修改源代碼中 POWER_BLOCK  的值,然后重新編譯。另一個(gè)方法是使用低效的 malloc/free 分配機(jī)制。 
     如果某個(gè)常用slab滿了  而且又沒開啟LRU,會(huì)出現(xiàn)命中低的情況·

     1M/最小的chunk=存儲(chǔ)的個(gè)數(shù)
    然后第二個(gè)chunk=第一個(gè)chunk*1.25
    這樣1M被不斷的分
    切到最后1M只能存一個(gè)chunk

      1M 用完會(huì)申請(qǐng)一個(gè)新的 1M

    但是 不能超過(guò)你的最大內(nèi)存數(shù)
    超過(guò)了 就開始回收
    也就是LRU
     當(dāng)memcache每次在get的時(shí)候會(huì)檢測(cè)key所對(duì)應(yīng)的value過(guò)期時(shí)間  那么當(dāng)檢測(cè)到此item過(guò)期了 value會(huì)被清除  key呢 保留 還是也會(huì)被清除 ?
    不會(huì)被清除,只會(huì)返回空
    直到lru覆蓋這個(gè)過(guò)期值
    那就是當(dāng)我程序棄用了大量的key時(shí)  cmd_get時(shí) 這些key 還會(huì)被掃描到?
    不會(huì)
    只是還存在內(nèi)存里  占著內(nèi)存
    posted on 2013-08-23 17:06 abin 閱讀(895) 評(píng)論(0)  編輯  收藏 所屬分類: memcache
    主站蜘蛛池模板: WWW亚洲色大成网络.COM| 1000部羞羞禁止免费观看视频| 亚洲女人影院想要爱| 亚洲国模精品一区| 好男人www免费高清视频在线| a级毛片黄免费a级毛片| 国产精品亚洲а∨无码播放不卡| 亚洲电影在线免费观看| 国产亚洲AV无码AV男人的天堂| 国产又大又粗又硬又长免费 | 日韩免费在线观看| 天天影院成人免费观看| 一级毛片免费观看| 国产成人无码区免费网站| 成人精品综合免费视频| 真正全免费视频a毛片| 亚洲精品成a人在线观看☆| 亚洲av专区无码观看精品天堂| 久久精品国产亚洲AV麻豆王友容| 国产亚洲精aa成人网站| 亚洲精品无码久久久| 免费在线观看黄网| 免费欧洲美女牲交视频| 国产免费啪嗒啪嗒视频看看| 女性无套免费网站在线看| 毛片a级毛片免费播放100| 四虎永久在线观看免费网站网址| 久久久久久精品免费看SSS| 6080午夜一级毛片免费看| 亚洲视频免费在线播放| 精品女同一区二区三区免费站| 在线免费中文字幕| 免费视频爱爱太爽了| 久九九精品免费视频| 国产精品无码免费播放| 在线a毛片免费视频观看| 日本不卡在线观看免费v| 国产免费av一区二区三区| 免费a级黄色毛片| 亚洲欧洲日产国码一级毛片| 中文字幕久久亚洲一区|