詳解Linux中/dev/shm目錄--概念、修改大小及應用

概述

很多朋友可能只是在裝Oracle時碰到/dev/shm過小之類的問題,但是為什麼要設置/dev/shm,該設置多大可能就沒有什麼概念了,下面就介紹下這塊的內容。


一、/dev/shm理論

/dev/shm/是Linux下一個非常有用的目錄,因為這個目錄不在硬盤上,而是在內存裡,使用了臨時文件系統。因此在Linux下,就不需要大費周折去建ramdisk,直接使用/dev/shm/就可達到很好的優化效果。/dev/shm/需要注意的一個是容量問題,在Linux下,它默認最大為內存的一半大小,使用df -h命令可以看到。

詳解Linux中/dev/shm目錄--概念、修改大小及應用

但它並不會真正的佔用這塊內存,如果/dev/shm/下沒有任何文件,它佔用的內存實際上就是0字節;如果它最大為1G,裡頭放有100M文件,那剩餘的900M仍然可為其它應用程序所使用,但它所佔用的100M內存,是絕不會被系統回收重新劃分的。

默認系統啟動就會加載/dev/shm ,它就是所謂的tmpfs,有人說跟ramdisk(虛擬磁盤),但不一樣。tmpfs是一個文件系統,而不是塊設備,只要安裝後就可以使用了。

tmpfs有以下優勢:

1)動態文件系統的大小。

2)tmpfs的另一個主要的好處是它閃電般的速度,因為典型的tmpfs文件系統會完全駐留在RAM中,讀寫幾乎可以是瞬間的。

3)tmpfs數據在重新啟動之後不會保留,因為虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。


二、修改/dev/shm大小

默認的最大一半內存大小在某些場合可能不夠用,並且默認的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/fstab

tmpfs /dev/shm tmpfs defaults,size=16G 0 0
詳解Linux中/dev/shm目錄--概念、修改大小及應用


三、/dev/shm應用

首先在/dev/shm建個tmp文件夾,然後與實際/tmp綁定。

mkdir /dev/shm/tmp
chmod 777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp
詳解Linux中/dev/shm目錄--概念、修改大小及應用

在使用mount –bind olderdir newerdir命令來掛載一個目錄到另一個目錄後,newerdir的權限和所有者等所有信息會發生變化。掛載後的目錄繼承了被掛載目錄的所有屬性,除了名稱。Oracle11g的amm內存管理模式就是使用/dev/shm,所以有時候修改MEMORY_TARGET或者MEMORY_MAX_TARGET會出現ORA-00845的錯誤。

另外,可以把一些程序產生的臨時文件存放到tmp目錄下,另外比如像memcached或php-fpm可以使用unix sock的方式連接,然後把unix sock文件放在此目錄下以此來提升性能。


巧用linux服務器的/dev/shm/,如果合理使用,可以避開磁盤IO不給力,提高網站訪問速度。後面會分享更多Linux方面的乾貨,感興趣的朋友可以關注一下~

詳解Linux中/dev/shm目錄--概念、修改大小及應用


分享到:


相關文章: