当前位置:   article > 正文

tmpfs 与/dev/shm介绍_tmpfs和shm

tmpfs和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是由linux内核里面的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的用途

例如:
Oracle 中的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 状态)。所有访问该文件系统的进程都被列出。

此文参考:

http://blog.chinaunix.net/uid-23284114-id-3232508.html

http://blog.csdn.net/tianlesoftware/article/details/7256984

http://www.linuxidc.com/Linux/2013-12/93747.htm


————————————————
版权声明:本文为CSDN博主「kevin_LCC」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kevin_LCC/article/details/42442495

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/503906
推荐阅读
相关标签
  

闽ICP备14008679号