shm == shared memory
linux中/dev目录下一般都是一些设备文件,例如磁盘、内存、摄像头等。
/dev/shm是linux下一个非常有用的目录,它是linux *** 作系统利用内存虚拟出来的一个目录,这个目录中的文件都是保存在内存中,效率非常高。或者说这个目录用于内存映射。也就是说往这个目录写东西,都会写到内存里,不会持久化到磁盘。系统重启以后,文件都消失。其大小是非固定的,不是预先分配好的内存来存储。它的默认大小是内存的一半,被它占用的内存不会被系统回收重新划分。
它本质上是所谓的文件系统tmpfs,这是一个将所有文件和文件夹写到虚拟内存中而不是实际写到磁盘中的虚拟文件系统。这意味中tmpfs中所有的内容都是临时的,在tmpfs卸载、系统重启或者电源切断后内容都将会丢失。技术的角度上来说,tmpfs将所有的内容放在内核内部缓存中并且会调整大小来容纳文件,并可从交换空间中交换出不需要的页。由此可见,tmpfs主要存储暂存的文件。它有以下优势:
注:
*** 作系统环境:
我们先来看一下使用df -h命令可以看到什么。
其中, /dev/shm 就是共享内存,它使用内存虚拟出一个文件路径,可以视为文件进行访问。它的容量默认内存的一半。
查看/dev/shm目录的文件,通常情况下,该目录没有文件。
如果需要使用到这个目录,并且默认的大小不够使用,而其他程序占用的内存又比较少的时候,可以修改其占用的最大内存。
容量扩容原理很简单,对其进行重新挂载即可,挂载的时候指定挂载参数。
这里对/dev/shm进行了重新挂载,并修改其大小为5G。
默认情况下,该目录的inode数量很低,一般都要调高些。下面的命令将共享目录最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。
如果需要永久修改/dev/shm的值,需要修改/etc/fstab
重新挂载
现在我们在/dev/shm目录中创建一个大小为1GB和一个大小为2GB的文件。
也可以使用查看内存的命令free来查看,这里显示总内存为64263MB,已使用1069MB,共享内存(shared)使用了3145MB。
对于一些iops较高的场景,可以开启写入缓存或者使用/dev/shm方式减少IOPS。结合场景,充分利用内存是/dev/shm的精髓。
应用案例:
一般地,首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定。
注意:在使用 mount –bind olderdir newerdir 命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录除了名称外,继承了被挂载目录的所有属性。
将/dev/shm与/tmp绑定后,常用的应用示例包括:
1.将squid的缓存目录cache_dir放到/tmp下
这里的第一个256表示使用256M内存,重启一下squid服务,这样缓存目录都放在了tmpfs文件中了,速度不用说吧。
2.将php的session文件放在/tmp下
对于一个访问量大的以apache php的网站,可能tmp下的临时文件都会很多,比如seesion或者一些缓存文件,那么你可以把它保存到tmpfs文件。保存seesion的方法很简单了:只要修改php.ini就行了,通过phpinfo测试文件查看你的php session存储位置,如果不在/tmp下,修改php.ini文件,修改如下:
3.将服务的socket文件放在/tmp下
如nginx.socket和mysql.sock。
你可以使用systemctl命令在tmp目录启用tmpfs, 首先用下面的命令来检查这个特性是否可用:
这会显示当先的状态,(如果未启用,)你可以使用下面的命令来启用它:
这会让系统控制/tmp目录并在该目录下挂载一个tmpfs文件系统。
你可以在/etc/fstab中添加下面这行,来手工在/tmp下挂载 tmpfs。
接着运行这条命令
这应该就会在df -h中显示tmpfs了,同样也会在你下次重启时自动挂载。
如果由于一些原因,你需要在一个文件夹下立即创建tmpfs,你可以使用下面的命令:
当然你可以在size选项中指定你希望的大小和希望的挂载点,只要记住是有效的目录就行了。
今天我们来谈谈 CentOS 7 中的一个文件系统tmpfs,这是一个将所有文件和文件夹写到虚拟内存中而不是实际写到磁盘中的虚拟文件系统。这意味中tmpfs中所有的内容都是临时的,在tmpfs卸载、系统重启或者电源切断后内容都将会丢失。技术的角度上来说,tmpfs将所有的内容放在内核内部缓存中并且会调整大小来容纳文件,并可从交换空间中交换出不需要的页。CentOS默认使用tmpfs做的几种用途可用df -h命令的输出来看:
# df –h
/dev - 含有针对所有设备的设备文件的目录
/dev/shm - 包含共享内存分配
/run - 用于系统日志
/sys/fs/cgroup - 用于cgrpups, 一个针对特定进程限制、管制和审计资源利用的内核特性
显然,它也可以用作/tmp目录, 你可以用下面的两种方法来做到:
使用systemctl来在/tmp中启用tmpfs
你可以使用systemctl命令在tmp目录启用tmpfs, 首先用下面的命令来检查这个特性是否可用:
# systemctl is-enabled tmp.mount
这会显示当先的状态,(如果未启用,)你可以使用下面的命令来启用它:
# systemctl enable tmp.mount
这会让系统控制/tmp目录并在该目录下挂载一个tmpfs文件系统。
手动挂载/tmp文件系统
你可以在/etc/fstab中添加下面这行,来手工在/tmp下挂载 tmpfs。
tmpfs /tmp tmpfs size=512m00
接着运行这条命令
# mount –a
这应该就会在df -h中显示tmpfs了,同样也会在你下次重启时自动挂载。
立即创建tmpfs
如果由于一些原因,你需要在一个文件夹下立即创建tmpfs,你可以使用下面的命令:
# mount -t tmpfs -o size=1G tmpfs /mnt/mytmpfs
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)