最近聽說/dev/shm共享記憶體是天生的memcache,於是在linux中做了乙個測試:
測試一:讀取100000次資料。
//使用memcache
require_once 'tools/cache/memcached-client.php';
$mem = new memcached($options
);$mem->set('x' , '0');
$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續執行三次執行上面的指令碼,得到的結果分別為10.5,10.46,10.63。
//從檔案中讀取,test.log的內容只有1位元組
$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續執行三次該指令碼,得到的結果分別為4.4,3.16,3.16。
//使用共享記憶體/dev/shm
$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續執行三次得到的結果分別為3.2,3.25,3.2。
讀取實驗的結果是:共享記憶體與讀取本地檔案的速度差不多,比memcache快。memcache為啥會比檔案io慢,我暫時沒搞清楚,聽別人說可能是因為memcache還有一層網路操作。
測試二:寫100000次資料。
//使用memcache
$mem = new memcached($options
);$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續三次執行得到的結果分別是10.93,9.22,9.41,跟讀取測試的結果差不多,說明memcache的讀與寫時間是差不多的。
//檔案系統
$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續三次執行得到的結果分別是14.12,13.62,13.34。比讀取測試的結果差了很多,比memcache慢了一些。我猜測原因可能是讀取的時候,由於我讀取的是同一塊內容,系統可能自動給我做了快取,所以讀比寫快了很多。
//共享記憶體
$time = microtime(true
);for ($i = 0 ; $i
< 100000 ; $i++)
$end = microtime(true
);echo
round($end - $time , 2);
連續三次執行得到的結果分別是2.5,2.52,2.53。寫跟讀的效能一樣優越。
從以上的測試可以看出,直接操作本地的共享記憶體,速度是最快的,比檔案操作或者memcache都快。
我總結了一下其優缺點:
優點:讀寫速度最快。
缺點:只適合單機應用,不適用於分布式應用。重啟機器會丟失內容(memcache也會丟)。
在一些特殊的場景中,如果適當使用共享記憶體,可能會使效能得到非常大的提公升。例如快取,php session等。
理論 實踐來認識 dev shm(共享記憶體目錄)
dev shm 是linux下乙個非常有用的目錄,因為這個目錄不在硬碟上,而是在記憶體裡。因此在linux下,就不需要大費周折去建ramdisk,直接使用 dev shm 就可達到很好的優化效果。dev shm 需要注意的乙個是容量問題,在linux下,它預設最大為記憶體的一半大小,使用df h d...
centos下的記憶體資料夾 dev shm
size xx large 介紹 size centos下,有個神奇的目錄,dev shm。這個目錄用於記憶體對映。也就是說往這個目錄寫東西,都會寫到記憶體裡,不會持久化到磁碟。系統重啟以後,檔案都消失。他的預設大小是記憶體的一半,被他占用的記憶體不會被系統 重新劃分。size xx large 設...
Linux共享記憶體及共享記憶體API
共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...