1、關於 /dev/shm 目錄
- 目錄路徑
/dev/shm 目錄位於 linux 系統的內存中,而不在磁盤裏,所以它的效率非常高,其上級目錄 /dev 主要是一些設備管理文件,例如磁盤、內存等。 - 容量大小
linux系統中,默認加載 /dev/shm 容量的大小是內存的一半,命令 df -h 可查看其大小,命令free -m可查看內存大小。例如內存約 1800M 的話,則 /dev/shm 大小約爲 900M。但是呢,它並不會真正去佔用這塊內存資源,如果/dev/shm/下沒有任何文件,那它佔用的內存實際上就是0字節,如果/dev/shm目錄下有200M的文件,那麼剩下的700M內存資源可以繼續給其他程序使用。
2、 關於 tmpfs
tmps定義
- tmpfs ,臨時文件系統,是一種基於內存的文件系統;
- 它和虛擬磁盤ramdisk比較類似像,但不完全相同,和ramdisk一樣,tmpfs可以使用RAM,但它也可以使用swap分區來存儲,而且傳統的ramdisk是個塊設備,要用mkfs來格式化它,才能真正地使用它;
- tmpfs是一個文件系統,並不是塊設備,只是安裝它,就可以通過mount命令來使用;
- tmpfs是最好的基於RAM的文件系統,默認情況下,tmpfs會mount到/dev/shm目錄。
tmps優勢
- 動態文件系統的大小,tmpfs 文件系統驅動程序會動態地增加或者減小文件系統並釋放 VM 資源;
- 擁有閃電般的速度,典型的 tmpfs 文件系統會完全駐留在 RAM 中,讀寫幾乎可以是瞬間的;
- tmpfs 數據在重新啓動之後不會保留,因爲虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。
3、修改/dev/shm大小
當默認的大小不夠使用,而其他程序佔用的內存又比較少的時候,可以通過重新掛載來修改其大小
- 通過 mount 修改,重啓後失效
# 普通快速修改
# mount -o size=1216M -o remount /dev/shm
# 將inode數量調到1000000,那麼預計最多可存入一百萬個小文件
# mount -o size=1216M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
- 通過/etc/fstab修改,永久生效
# 修改 tmpfs size
# echo 'tmpfs /dev/shm tmpfs defaults,size=1.2G 0 0' >> /etc/fstab
# 修改後,重新掛載生效
# mount -o remount /dev/shm
4、文件佔用內存測試
- 查看原有內存佔用
# 可以看到share目錄爲0,buff/cache 緩存了366M文件在內存中
# free -m
- 通過 dd 創建一個1024M的文件
# 可以看到share目錄下多了1024M,buff/cache 也多了1G,可用內存減少了1G
# dd if=/dev/zero of=/dev/shm/test.random bs=1M count=1024
5、文件傳輸速度對比
寫兩個小腳本傳輸文件,通過計算時間差來對比傳輸速度
[root@VM_0_14_centos mnt]# du -sh /mnt/test.random
1.1G /mnt/test.random
[root@VM_0_14_centos mnt]# cat test_shm.sh
#!/bin/sh
echo `date +%F%t%T`
cp /mnt/test.random /dev/shm/
echo `date +%F%t%T
[root@VM_0_14_centos mnt]# cat test_tmp.sh
#!/bin/sh
echo `date +%F%t%T`
cp /mnt/test.random /tmp/
echo `date +%F%t%T`
[root@VM_0_14_centos mnt]# chmod +x test_shm.sh
[root@VM_0_14_centos mnt]# chmod +x test_tmp.sh
# 可以看到傳輸速度相對快一些
[root@VM_0_14_centos mnt]# ./test_shm.sh
2019-09-06 01:25:20
2019-09-06 01:25:26
[root@VM_0_14_centos mnt]# ./test_tmp.sh
2019-09-06 01:25:33
2019-09-06 01:25:43