Linux的tmpfs文件系統

前幾天發現服務器的內存(ram)和swap使用率非常低,於是就想這麼多的資源

不用豈不浪費了?google了一下,認識了tmpfs,總的來說tmpfs是一種虛擬內存文件系統

正如這個定義它最大的特點就是它的存儲空間在VM裏面,這裏提一下VM(virtual memory)

,VM是由linux內核裏面的vm子系統管理的東東,現在大多數操作系統都採用了虛擬內存

管理機制?更詳細的說明請參考<<UnderStanding The Linux Virtual Memory Manager>)

linux下面VM的大小由RM(Real Memory)和swap組成,RM的大小就是物理內存的大小,而Swap

的大小是由你自己決定的。Swap是通過硬盤虛擬出來的內存空間,因此它的讀寫速度相對

RM(Real Memory)要慢許多,我們爲什麼需要Swap呢?當一個進程申請一定數量的內存時

,如內核的vm子系統發現沒有足夠的RM時,就會把RM裏面的一些不常用的數據交換到Swap

裏面,如果需要重新使用這些數據再把它們從Swap交換到RM裏面。 如果你有足夠大的物理

內存,根本不需要劃分Swap分區。

     通過上面的說明,你該知道tmpfs使用的存儲空間VM是什麼了吧? 前面說過VM由

RM+Swap兩部分組成,因此tmpfs最大的存儲空間可達(The size of RM + The size of

Swap)。 但是對於tmpfs本身而言,它並不知道自己使用的空間是RM還是Swap,這一切

都是由內核的vm子系統管理的。


     怎樣使用tmpfs呢?

     #mount  -t tmpfs -o size=20m  tmpfs  /mnt/tmp

     上面這條命令分配了上限爲20m的VM到/mnt/tmp目錄下,用df命令查看一下,確實

/mnt/tmp掛載點顯示的大小是20m,但是tmpfs一個優點就是它的大小是隨着實際存儲的

容量而變化的,換句話說,假如/mnt/tmp目錄下什麼也沒有,tmpfs並不佔用VM。上面的

參數20m只是告訴內核這個掛載點最大可用的VM爲20m,如果不加上這個參數,tmpfs默認

的大小是RM的一半,假如你的物理內存是128M,那麼tmpfs默認的大小就是64M,

   
     tmpfs有沒有缺點呢?

     當然有,由於它的數據是在VM裏面,因此斷電或者你卸載它之後,數據就會立即丟

失,這也許就是它叫tmpfs的原故。不過這其實不能說是缺點。那tmpfs到底有什麼用呢?

     tmpfs的用途

     由於tmpfs使用的是VM,因此它比硬盤的速度肯定要快,因此我們可以利用這個優點

使用它來提升機器的性能。


      #mount -t tmpfs  -o size=2m   tmpfs  /tmp

      上面這條命令分配了最大2m的VM給/tmp。   

       由於/tmp目錄是放臨時文件的地方,因此我們可以使用tmpfs來加快速度,由於

沒有掛載之前/tmp目錄下的文件也許正在被使用,因此掛載之後系統也許有的程序不能

正常工作。沒有關係,只要在/etc/fstab裏面加上下面的語句

      tmpfs    /tmp      tmpfs   size=2m    0   0

重啓電腦之後就一切OK了。

        
      強列建議你看看下面這篇文章。

      http://www-128.ibm.com/developerworks/cn/linux/filesystem/l-fs3/


      另外還可以參考

      2.6內核裏面的Documentation/filesystems/tmpfs.txt

 

例子:

linux下用tmpfs加速你的WEB服務器

使用tmpfs,我把他消化後用來實現虛擬磁盤來存放squid的緩存文件和php的seesion。速度快不少哦!
默 認系統就會加載/dev/shm ,它就是所謂的tmpfs,有人說跟ramdisk(虛擬磁盤),但不一樣。象虛擬磁盤一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區來存儲。而且傳統的虛擬磁盤是個塊設備,並需要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可以使用了。


tmpfs有以下優勢:

1.動態文件系統的大小,
2.tmpfs 的另一個主要的好處是它閃電般的速度。因爲典型的 tmpfs 文件系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。
3.tmpfs 數據在重新啓動之後不會保留,因爲虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。
好了講了一些大道理,大家看的煩了吧,還是講講我的應用吧:)
首先在/dev/stm建個tmp文件夾,然後與實際/tmp綁定
mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp
1.squid的緩存目錄設置
vi /etc/squid/squid.conf

修改成
cache_dir ufs /tmp 256 16 256
這裏的第一個256表示使用256M內存,我覺得高性能LINUX雙效防火牆HOWTO使用ramdisk的方法還不如直接使用tmpfs,至少每次啓動不用mkfs,還可以動態改變大小。
然後重啓一下服務,ok,現在所有的squid緩存文件都保存倒tmpfs文件系統裏了,很快哦。

2.對php性能的優化
對於一個訪問量大的以apache+php的網站,可能tmp下的臨時文件都會很多,比如seesion或者一些緩存文件,那麼你可以把它保存到tmpfs文件。
保存seesion的方法很簡單了只要修改php.ini就行了,由於我已經把/dev/stm/tmp與/tmp綁定,所以不改寫也行,至於php程序產生的緩存文件那隻能改自己的php程序了:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章