【例項】tmpfs /dev/shm

不一樣的天空w發表於2016-11-13

tmpfs /dev/shm


df –Th檢視磁碟容量,/dev/shm的作用到底是什麼?

[root@rac01 ~]# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext3    244G   35G  197G  15% /
/dev/sda1     ext3    190M   12M  169M   7% /boot
tmpfs        tmpfs    3.9G  2.1G  1.9G  54% /dev/shm

tmpfs介紹

tmpfs是一種虛擬記憶體檔案系統,而不是塊裝置。是基於記憶體的檔案系統,建立時不需要使用mkfs等初始化
它最大的特點就是它的儲存空間在VM(virtual memory),VM是由核心裡面的vm子系統管理的。
linux下面VM的大小由RM(Real Memory)和swap組成,RM的大小就是實體記憶體的大小,而Swap的大小是由自己決定的。
Swap是透過硬碟虛擬出來的記憶體空間,因此它的讀寫速度相對RM(Real Memory)要慢許多,當一個程式申請一定數量的記憶體時,如核心的vm子系統發現沒有足夠的RM時,就會把RM裡面的一些不常用的資料交換到Swap裡面,如果需要重新使用這些資料再把它們從Swap交換到RM裡面。如果有足夠大的實體記憶體,可以不劃分Swap分割槽。


VM由RM+Swap兩部分組成,因此tmpfs最大的儲存空間可達(The size of RM + The size of Swap)。 但是對於tmpfs本身而言,它並不知道自己使用的空間是RM還是Swap,這一切都是由核心的vm子系統管理的。
tmpfs預設的大小是RM的一半,假如你的實體記憶體是1024M,那麼tmpfs預設的大小就是512M
一般情況下,是配置的小於實體記憶體大小的。
tmpfs配置的大小並不會真正的佔用這塊記憶體,如果/dev/shm/下沒有任何檔案,它佔用的記憶體實際上就是0位元組;如果它最大為1G,裡頭放有100M檔案,那剩餘的900M仍然可為其它應用程式所使用,但它所佔用的100M記憶體,是不會被系統回收重新劃分的。
當刪除tmpfs中檔案,tmpfs 檔案系統驅動程式會動態地減小檔案系統並釋放 VM 資源。

/dev/shm在記憶體中,而不是在磁碟上。由於/dev/shm存在於記憶體中,所以速度肯定大大優於磁碟。

/dev/shm不是立即佔用記憶體,而是採用需要才佔用記憶體的方法。在上面的例子中,/dev/shm設定的值是20G,我們看到已用寫入了9.5G的資料,也就是佔用了9.5G的記憶體。

 

/dev/shm採用tmpfs檔案系統,它具有以下優點:


1.       速度飛快。

2.       動態分配:寫入更多的資料,/dev/shm佔用更多的記憶體;刪除/dev/shm中的資料,那麼就減少佔用記憶體。不用這樣利於記憶體的充分使用。


tmpfs的用途

例如:
中的Automatic Memory Management特性就使用了/dev/shm。
LINUX中可以把一些程式的臨時檔案放置在tmpfs中,利用tmpfs比硬碟速度快的特點提升系統效能。

如果 tmpfs 小於 MEMORY_TARGET 的大小,啟動會報錯:
ORA-00845: MEMORY_TARGET not supported onthis system

 

/dev/shm另一個特點:系統重啟後、重新掛載/dev/shm後,/dev/shm中的資料都會消失。

 

/dev/shm預設值是記憶體的一半,有時根據需要會增大/dev/shm,如oracle中設定memory_target中的值超過了/dev/shm的大小。

 

修改/dev/shm大小:

1.Vim /etc/fstab

原來是這樣:

tmpfs            /dev/shm                tmpfs   defaults                    0 0

修改成如下,也就是20G

tmpfs            /dev/shm                tmpfs   defaults,size=20000M        0 0



2.重新mount /dev/shm後生效

# mount -o remount /dev/shm

或者umount /dev/shm

mount /dev/shm



透過df –Th檢視是否生效

 

也可以用下面的方式

# mkdir /mnt/tmp

# mount -t tmpfs -o size=256m,mode=1777 tmpfs /mnt/tmp

 

 

問題解決:

有時會遇到/dev/shm 解除安裝不掉的情況

# umount /dev/shm

umount: /dev/shm: device is busy.

 

用fuser處理

# fuser -km /dev/shm

# umount /dev/shm

# mount /dev/shm

 

fuser命令


-k:kill processes accessing the named file(殺死所有正在訪問指定檔案的程式)

-m 表示指定檔案所在的檔案系統或者塊裝置(處於 mount 狀態)。所有訪問該檔案系統的程式都被列出。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2128362/,如需轉載,請註明出處,否則將追究法律責任。

相關文章