
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选项中指定你希望的大小和希望的挂载点,只要记住是有效的目录就行了。
通过命令ls/可以展示Linux系统目录结构,主要包括以下内容:
1.bin
bin是Binary的缩写, 这个目录存放着最经常使用的命令。
2.boot
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
3.dev
dev是Device的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
4.etc
这个目录用来存放所有的系统管理所需要的配置文件和子目录。
5.home
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
6.lib
这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
7.lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
8.media
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
9.mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容。
10.opt
这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
11.proc
这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器。
12.root
该目录为系统管理员,也称作超级权限者的用户主目录。
13.sbin
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
14.selinux
这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
15.srv
该目录存放一些服务启动之后需要提取的数据。
…………
在linux系统中,有几个目录是比较重要的,平时需要注意不要误删或随意更改内部文件,主要包括/etc、/bin、/sbin、/usr/bin、/usr/sbin以及/var。
dev是Linux下的一个目录。在linux下,/dev目录是很重要的,各种设备都在下面。
dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos *** 作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)