dev shm共享記憶體

2022-03-08 06:14:04 字數 2094 閱讀 4614

最近聽說/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 共...