/dev/shm 概念php
首先能夠看出來/dev/shm是一個設備文件, 能夠把/dev/shm看做是系統內存的入口, 能夠把它看作是一塊物理存儲設備,一個tmp filesystem, 你能夠經過這個設備向內存中讀寫文件, 以加快某些I/O高的操做,好比對一個大型文件頻繁的open, write, read,html
聽說oracle就利用了/dev/shm(shitou沒用過oracle), 能夠經過mount命令列出當前的/dev/shm的掛載的文件系統,
你能夠直接對/dev/shm進行讀寫操做, 例如:node
#touch /dev/shm/file1
既然是基於內存的文件系統,系統重啓後/dev/shm下的文件就不存在了。Linux默認(CentOS)/dev/shm分區的大小是系統物理內存的50%, 雖然說使用/dev/shm對文件操做的效率會高不少。可是目前各發行軟件中卻不多有使用它的(除了前面提到的Oracle), 能夠經過ls /dev/shm查看下面是否有文件, 若是沒有就說明當前系統並無使用該設備。mysql
1、/dev/shm理論linux
默認的Linux發行版中的內核配置都會開啓tmpfs,映射到了/dev/下的shm目錄。能夠經過df 命令查看結果.
/dev/shm/是linux下一個很是有用的目錄,由於這個目錄不在硬盤上,而是在內存裏。所以在linux下,就不須要大費周折去建ramdisk,直接使用/dev/shm/就可達到很好的優化效果。默認系統就會加載/dev/shm ,它就是所謂的tmpfs,有人說跟ramdisk(虛擬磁盤),但不同。象虛擬磁盤同樣,tmpfs 可使用您的 RAM,但它也可使用您的交換分區來存儲。並且傳統的虛擬磁盤是個塊設備,並須要一個 mkfs 之類的命令才能真正地使用它,tmpfs 是一個文件系統,而不是塊設備;您只是安裝它,它就可使用了。
tmpfs有如下優點:
1。動態文件系統的大小,/dev /shm/須要注意的一個是容量問題,在linux下,它默認最大爲內存的一半大小,使用df -h命令能夠看到。但它並不會真正的佔用這塊內存,若是/dev/shm/下沒有任何文件,它佔用的內存實際上就是0字節;若是它最大爲1G,裏頭放有 100M文件,那剩餘的900M仍然可爲其它應用程序所使用,但它所佔用的100M內存,是毫不會被系統回收從新劃分的
2。tmpfs 的另外一個主要的好處是它閃電般的速度。由於典型的 tmpfs 文件系統會徹底駐留在 RAM 中,讀寫幾乎能夠是瞬間的。
3。tmpfs 數據在從新啓動以後不會保留,由於虛擬內存本質上就是易失的。因此有必要作一些腳本作諸如加載,綁定的操做。 nginx
2、修改/dev/shm大小web
默認的最大一半內存大小在某些場合可能不夠用,而且默認的inode數量很低通常都要調高些,這時能夠用mount命令來管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的機器上,將最大容量調到1.5G,而且inode數量調到1000000,這意味着大體可存入最多一百萬個小文件。
若是須要永久修改/dev/shm的值,須要修改/etc/fstabsql
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
mount -o remount /dev/shm
3、/dev/shm應用apache
首先在/dev/shm建個tmp文件夾,而後與實際/tmp綁定緩存
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )
在使用mount –bind olderdir newerdir命令來掛載一個目錄到另外一個目錄後,newerdir的權限和全部者等全部信息會發生變化。掛載後的目錄繼承了被掛載目錄的全部屬性,除了名稱。Oracle 11g的amm內存管理模式就是使用/dev/shm,因此有時候修改MEMORY_TARGET或者MEMORY_MAX_TARGET會出現ORA-00845的錯誤:http://blog.csdn.net/heyutao007/article/details/7051269
巧用linux服務器的/dev/shm/,若是合理使用,能夠避開磁盤IO不給力,提升網站訪問速度。
首先讓咱們認識一下,什麼是tmpfs和/dev/shm/?
tmpfs是Linux/Unix系統上的一種基於內存的文件系統。tmpfs可使用您的內存或swap分區來存儲文件。因而可知,tmpfs主要存儲暫存的文件。它有以下2個優點 : 1. 動態文件系統的大小。2. tmpfs 的另外一個主要的好處是它閃電般的速度。由於典型的 tmpfs 文件系統會徹底駐留在內存 RAM 中,讀寫幾乎能夠是瞬間的。同時它也有一個缺點 tmpfs 數據在從新啓動以後不會保留,由於虛擬內存本質上就是易失的。因此有必要作一些腳本作諸如加載,綁定的操做。
tmpfs不具有持久性,重啓後數據不保留,請務必注意!!!
/dev/shm/是一個設備文件,它使用就是tmpfs文件系統(注意:在Centos和Redhat下,/dev/shm目錄是一個連接,指向/run/shm目錄,在Ubuntu系統下tmpfs文件系統對應的是/run/shm目錄,可使用df命令查看),由於 /dev/shm/這個目錄不在硬盤上,而是在內存裏,它就所謂的tmpfs。在Redhat/CentOS等linux發行版中默認大小爲物理內存的一半。 好比個人的Red Hat Enterprise Linux Server 5.4 64(單核,512內存)分配內存爲512M,因此/dev/shm爲250M左右,查看/dev/shm以下:
[root@AY1212111202285f63122 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 20G 7.6G 11G 42% /
tmpfs 250M 0 250M 0% /dev/shm
tmpfs是基於內存的文件系統,建立時不須要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改成512M,修改/etc/fstab的
tmpfs /dev/shm tmpfs defaults 0 0
改成
tmpfs /dev/shm tmpfs,defaults,size=512m 0 0
因此修改前:
LABEL=/ / ext3 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
修改後爲:
LABEL=/ / ext3 defaults 1 1
tmpfs /dev/shm tmpfs,defaults,size=512m 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
而後執行 mount -o remount /dev/shm
[root@AY1212111202285f63122 ]# mount -o remount /dev/shm
[root@AY1212111202285f63122 ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 20G 7.6G 11G 42% /
tmpfs 512M 0 512M 0% /dev/shm
怎麼樣,變成512M啦,使用很方便吧,重啓也沒有問題的,哈哈。固然在生產環境中你能夠把內存加大些,反正如今內存很便宜啦,爲了提升性能也須要將/dev/shm加大。
tmpfs(/dev/shm)的使用及應用場景
tmpfs是基於內存的,速度是不用說的,硬盤和它無法比。Oracle 中的Automatic Memory Management特性就使用了/dev/shm。另外若是在網站運維中好好利用tmpfs,將有意想不到的收穫。咱們先在/dev/shm建一個tmp目前,並與/tmp綁定。
[root@AY1212111202285f63122 ~]# mkdir /dev/shm/tmp
[root@AY1212111202285f63122 ~]# chmod 1777 /dev/shm/tmp //注意權限
[root@AY1212111202285f63122 ~]# mount --bind /dev/shm/tmp /tmp
[root@AY1212111202285f63122 ~]# ls -ld /tmp
drwxrwxrwt 2 root root 40 May 29 21:46 /tmp
如下/tmp使用tmpfs文件系統的一些應用示例,通常tmpfs內存文件系統在作web緩存,臨時文件存儲時會對web訪問有很好的加速做用,從而提升網站訪問的速度。
1.將squid的緩存目錄cache_dir放到/tmp下
vi /etc/squid/squid.conf 修改爲 cache_dir ufs /tmp 256 16 256
這裏的第一個256表示使用256M內存,重啓一下squid服務,這樣緩存目錄都放在了tmpfs文件中了,速度不用說吧。
2.將php的session文件放在/tmp下
對於一個訪問量大的以apache php的網站,可能tmp下的臨時文件都會不少,好比seesion或者一些緩存文件,那麼你能夠把它保存到tmpfs文件。保存seesion的方法很簡單了:只要修改php.ini就好了,經過phpinfo測試文件查看你的php session存儲位置,若是不在/tmp下,修改php.ini文件,修改以下:
session.save_path = 「/tmp」
3.將服務的socket文件放在/tmp下
如nginx.socket和mysql.sock
至於tmpfs的其餘應用,我想你們可能經過這篇文章會有所啓發。再次強調下:tmpfs 數據在從新啓動以後不會保留,重啓tmpfs 數據會丟失,因此有必要作一些腳本作諸如加載,綁定的操做!
http://www.tmtpost.com/43815.html
4、與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的空間