linux下的/dev/shm/ 以及與swap目錄的區別


摘自:http://miaozk2006.blog.163.com/blog/static/3824705820111028183996/

 

一、/dev/shm/介紹:

/dev/shm/是linux下一個非常有用的目錄,因為這個目錄不在硬盤上,而是在內存里。因此在linux下,就不需要大費周折去建ramdisk,直接使用/dev/shm/就可達到很好的優化效果。 
/dev /shm/需要注意的一個是容量問題,在linux下,它默認最大為內存的一半大小,使用df -h命令可以看到。但它並不會真正的占用這塊內存,如果/dev/shm/下沒有任何文件,它占用的內存實際上就是0字節;如果它最大為1G,里頭放有 100M文件,那剩余的900M仍然可為其它應用程序所使用,但它所占用的100M內存,是絕不會被系統回收重新划分的,否則誰還敢往里頭存文件呢? 
默認的最大一半內存大小在某些場合可能不夠用,並且默認的inode數量很低一般都要調高些,這時可以用mount命令來管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm


 

在2G的機器上,將最大容量調到1.5G,並且inode數量調到1000000,這意味着大致可存入最多一百萬個小文件。

 

為當/dev/shm空間不夠時可以占用swap的空間,所以不用擔心存儲空間不夠用。想想看,從磁盤IO操作到內存操作,php讀寫SESSION的速度會快多少?只是需要注意,存儲在/dev/shm的數據,在服務器重啟后會全部丟失。

 

默認系統就會加載/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(--bind )
  在使用mount --bind olderdir newerdir命令來掛載一個目錄到另一個目錄后,newerdir的權限和所有者等所有信息會發生變化。掛載后的目錄繼承了被掛載目錄的所有屬性,除了名稱。
巧用tmpfs加速你的linux服務器,就是使用虛擬磁盤來存放squid的緩存文件和php的seesion。速度快不少哦! 
默 認系統就會加載/dev/shm ,它就是所謂的tmpfs,有人說跟ramdisk(虛擬磁盤),但不一樣。象虛擬磁盤一樣,tmpfs 可以使用您的 RAM,但它也可以使用您的交換分區來存儲。而且傳統的虛擬磁盤是個塊設備,並需要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可以使用了。 
tmpfs有以下優勢: 
1。動態文件系統的大小, 
2。tmpfs 的另一個主要的好處是它閃電般的速度。因為典型的 tmpfs 文件系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的。 
3。tmpfs 數據在重新啟動之后不會保留,因為虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。 
好了講了一些大道理,大家看的煩了吧,還是講講我的應用吧:) 
首先在/dev/shm建個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內存,我覺得http://www.linuxaid.com.cn/articles/4/4 /441672019.shtml里使用ramdisk的方法還不如直接使用tmpfs,至少每次啟動不用mkfs,還可以動態改變大小。這時的/tmp 實際就是/dev/shm/tmp 
然后重啟一下服務,ok,現在所有的squid緩存文件都保存倒tmpfs文件系統里了,很快哦。 
2. 對php性能的優化 
對於一個訪問量大的以apache+php的網站,可能tmp下的臨時文件都會很多,比如seesion或者一些緩存文件,那么你可以把它保存到tmpfs文件。 
保存seesion的方法很簡單了只要修改php.ini就行了,由於我已經把/dev/stm/tmp與/tmp綁定,所以不改寫也行,至於php程序產生的緩存文件那只能改自己的php程序了:) 
至於tmpfs的其他應用,我想大家可能通過這篇文章會有所啟發。

二、與swap的區別:
/dev/shm
首先可以看出來/dev/shm是一個設備文件, 可以把/dev/shm看作是系統內存的入口, 可以把它看做是一塊物理存儲設備,
一個tmp filesystem, 你可以通過這個設備向內存中讀寫文件, 以加快某些I/O高的操作,比如對一個大型文件頻繁的open, write, read,
據說oracle就利用了/dev/shm(shitou沒用過oracle), 可以通過mount命令列出當前的/dev/shm的掛載的文件系統,
你可以直接對/dev/shm進行讀寫操作, 例如:
#touch /dev/shm/file1
既然是基於內存的文件系統,系統重啟后/dev/shm下的文件就不存在了
 
Linux默認(CentOS)/dev/shm分區的大小是系統物理內存的50%, 雖說使用/dev/shm對文件操作的效率會高很多,
但是目前各發行軟件中卻很少有使用它的(除了前面提到的Oracle), 可以通過ls /dev/shm查看下面是否有文件, 如果沒有就說明當前系統並沒有使用該設備.
 
swap
而swap是Linux的虛擬內存, 即在硬盤上開辟空間當內存不夠時充當內存使用, 因此可以理解為當/dev/shm空間不夠時可以占用swap的空間

 


摘自:http://hi.baidu.com/heyuejuan/blog/item/e7aba945ba27c2288694730a.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM