[转载]Memcache内存临界测试
作者:馬江濤
時(shí)間:2010-08-19
前言
此文檔幫助您了解 memcache 在保存數(shù)據(jù)時(shí),假如要保存的數(shù)據(jù)量接近 memcache 指定的最大內(nèi)存時(shí),memcache 是怎樣進(jìn)行數(shù)據(jù)存儲(chǔ)的,以及怎樣盡可能的提高 memcache 的命中率。
關(guān)鍵詞:memcache 、臨界、內(nèi)存、memcache.php、LRU、監(jiān)控
?
1 測(cè)試目的
探究 memcache 保存數(shù)據(jù)時(shí),在保存的數(shù)據(jù)量接近 memcache 指定內(nèi)存臨界時(shí),保存規(guī)律是怎樣的?
?
2 測(cè)試環(huán)境
?
| 軟件 | 版本號(hào) | 說明 |
| php | php-5.3.3 | ? |
| memcache | memcached Server 1.2.1 | 最大內(nèi)存設(shè)置為 128M |
| apache | 2.2.16 | ? |
| memcache.php | ? | 一個(gè)開源的 php腳本 |
?
3 測(cè)試用例
定義變量 i從 0到 3853628增加(一個(gè) key與 value占據(jù)的空間約 50 bytes)設(shè)置 Key為:hello+i
設(shè)置 Value為:第 i個(gè)我
循環(huán)插入鍵值數(shù)
4 測(cè)試結(jié)果
1) 幾個(gè)截圖及說明如下
1》放入第 1986718 個(gè)對(duì)象后,內(nèi)存消耗 77.8M(占 memcache 指定最大內(nèi)存 60.8%)
?
?
2》放入2880657 個(gè)對(duì)象后,內(nèi)存消耗78.1m(占memcache 指定最大內(nèi)存61.0%)
?
3》放入3853630 個(gè)對(duì)象后,內(nèi)存消耗78.1m(占memcache 指定最大內(nèi)存61.0%)
以上三個(gè)圖示說明,插入的數(shù)據(jù)如果大小變化不是很大時(shí),memcache 中的數(shù)據(jù)存儲(chǔ)到一定的時(shí)候(占總內(nèi)存60%左右時(shí)),不再消耗內(nèi)存
?
3) 此時(shí)獲取緩存中的數(shù)據(jù)
獲取hello1 得到 null
獲取hello1926814 得到 null 4/8 位置的數(shù)據(jù)
獲取hello2408518 得到 null 5/8 位置的數(shù)據(jù)
獲取hello2890221 得到 第2890221 個(gè)我 6/8 位置的數(shù)據(jù)
獲取hello3853628 得到 第3853628 個(gè)我
?
以上數(shù)據(jù)說明,在上述情況下,內(nèi)存消耗到60%左右時(shí),memcache 就開始執(zhí)行LRU 機(jī)制了。
?
原因分析:
1 memcached 中新的value 過來存放的地址是該value 的大小決定的,value 總是會(huì)被選擇存放到chunk 與其最接近的一個(gè)slab 中,假如已經(jīng)沒有合適的chunk 了,那就開始LRU 了。所以,可見memcached 的LRU 不是全局的,而是針對(duì)slab 的,是區(qū)域性的。
2 memcached 的內(nèi)存分配采用的是預(yù)分配方式,為了獲得更快的速度,不得不以空間換時(shí)間。所以在如上情況下(插入的數(shù)據(jù)大小變化不是很大時(shí)),在內(nèi)存消耗耗到60%左右時(shí)開始啟用LRU 機(jī)制。其余的40%在這種場(chǎng)合,基本等于是浪費(fèi)掉的。
?
3 要提高memcached 的命中率,可以通過預(yù)估我們的value 大小,然后適當(dāng)?shù)恼{(diào)整增長(zhǎng)因子來實(shí)現(xiàn)。(通過調(diào)整增長(zhǎng)因子 –f 1.1 表示chunk 按照1.1 倍的速度增長(zhǎng),可以盡可能多的擁有某種大小的chunk)
注:
memcache 的數(shù)據(jù)存儲(chǔ)時(shí)有3 個(gè)概念:1》 slab, 2》 page, 3》 chunk
一個(gè)memcahced 進(jìn)程會(huì)預(yù)先將自己劃分為若干個(gè)slab,每個(gè)slab 下又有若干個(gè)page,每個(gè)page 下又有多個(gè)chunk。Slab 的數(shù)量是有限的,幾個(gè),十幾個(gè),或者幾十個(gè),這個(gè)跟進(jìn)程配置的內(nèi)存有關(guān)。而每個(gè)slab 下得page 默認(rèn)情況是1m,也就是說如果一個(gè)slab 占用100m 得內(nèi)存得話,那么默認(rèn)情況下這個(gè)slab 所擁有得page 的個(gè)數(shù)就是100,而chunk 就是數(shù)據(jù)存放的最終地方。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiunadianshi/articles/2429125.html
總結(jié)
以上是生活随笔為你收集整理的[转载]Memcache内存临界测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RadioWar_RFID_LiveCD
- 下一篇: 没有测量,就没有管理