我们日常操作中经常df –Th查看磁盘容量,那么/dev/shm的作用到底是什么?
$ df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 ext3 57G 32G 23G 59% /
/dev/sda5 ext3 476G 341G 111G 76% /var
/dev/sda1 ext3 190M 29M 153M 16% /boot
/dev/sdb1 ext2 1.8T 1.2T 584G 67% /ext
tmpfs tmpfs 20G 9.5G 11G 49% /dev/shm
/dev/shm在内存中,而不是在磁盘上。由于/dev/shm存在于内存中,所以速度肯定大大优于磁盘。
/dev/shm不是立即占用内存,而是采用需要才占用内存的方法。在上面的例子中,/dev/shm设置的值是20G,我们看到已用写入了9.5G的数据,也就是占用了9.5G的内存。
/dev/shm采用tmpfs文件系统,它具有以下优点:
1. 速度飞快。
2. 动态分配:写入更多的数据,/dev/shm占用更多的内存;删除/dev/shm中的数据,那么就减少占用内存。不用这样利于内存的充分使用。
/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 状态)。所有访问该文件系统的进程都被列出。
首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )