linux tmp目录与内存解析

linux tmp目录与内存解析,第1张

使用free可以获取到设备当前的内存 其中,各项表示的含义如下所示: total: 总计物理内存大小。 used: 已使用内存大小。 free: 可使用内存大小。 shared: 多个进程共享的内存总额。 buffers/cached: 磁盘缓存大小。 单位都为KB。 对于系统而言,buffers和cached都是被使用的,所以可用内存为1037880KB。 对于应用程序而言,buffers和cached是可用的。当应用程序需要内存的时候,buffers和cached会被回收。从应用程序的角度而言,可用内存=free memory+buffers+cached。按上面的例子,即可用内存为1037880+18864+123656=1180400。 使用cat /proc/meminfo可以查看更详细的内存信息。 /proc/iomem:查看物理设备在物理内存中的映射关系 /proc/slabinfo:内核对象的当前使用状态 /proc/vmstat:虚拟内存统计信息。可以使用vmstat - Report virtual memory statistics 打印虚拟内存状态。 如上所示,/tmp为内存文件系统,内存挂载为内存文件系统(tmpfs)。使用的物理空间不是磁盘,而是内存条。设备重启后,/tmp下文件全清空。 tmpfs文件系统产生原因是为了提高性能。程序运行时候产生的临时文件放在磁盘会影响性能,于是tmpfs作为虚拟内存子系统来储存文件。POSIX共享内存也是基于tmpfs来实现的。 tmpfs的最大空间由RM(Real Memory,即物理内存)和swap(硬盘虚拟的内存空间)组成。 查看挂载信息,可知 tmpfs 文件系统的挂载点有两个,一个/dev/shm,另一个为/tmp。默认情况下, /tmp 将最多使用一半内存。 如果往/tmp文件夹加入大量文件,也会造成系统内存不足。 使用ps可以查看进程的状态 其中与内存相关项含义如下所示: VSZ:虚拟内存大小。virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excludedthis is subject to change. (alias vsize). RSS:实际使用物理内存。resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz). 虚拟内存是对进程而言使用的内存,会比较大,可以理解为一个内存布局,建立虚拟内存和磁盘文件的映射关系。在进程调用的时候,查找虚拟内存,将虚拟内存对应磁盘文件拷贝到物理内存,进行调度寻址等 *** 作。 进程使用的物理内存为RSS表示的物理内存大小,其中包括链接的动态库使用的内存,不只是单独进程使用的物理内存大小。 也可以通过/proc/下去查找对应进程id的相关内存信息。 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。 /proc/pid/statm 进程所占用的内存。

一、/dev/shm理论

默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录。可以通过df

命令查看结果.

/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。默认系统就会加载/dev/shm

,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs

可以使用您的

RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个

mkfs

之类的命令才能真正地使用它,tmpfs

是一个文件系统,而不是块设备您只是安装它,它就可以使用了。

tmpfs有以下优势:

1。动态文件系统的大小,/dev

/shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df

-h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节如果它最大为1G,里头放有

100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的

2。tmpfs

的另一个主要的好处是它闪电般的速度。因为典型的

tmpfs

文件系统会完全驻留在

RAM

中,读写几乎可以是瞬间的。

3。tmpfs

数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的 *** 作。

二、修改/dev/shm大小

默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。

#mount

-o

size=1500M

-o

nr_inodes=1000000

-o

noatime,nodiratime

-o

remount

/dev/shm

在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。

如果需要永久修改/dev/shm的值,需要修改/etc/fstab

代码如下:

tmpfs

/dev/shm

tmpfs

defaults,size=1.5G

0

0

mount

-o

remount

/dev/shm

三、/dev/shm应用

首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定

代码如下:

#mkdir

/dev/shm/tmp

#chmod

1777

/dev/shm/tmp

#mount

–bind

/dev/shm/tmp

/tmp(–bind

)

在使用mount

–bind

olderdir

newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性,除了名称。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6099836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存