linux tmpfs和swap介绍

什么是tmpfs

tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,temfs主要存储暂存的文件。

linux内核中的VM子系统负责在后台管理虚拟内存资源Virtual Memory,即RAM和swap资源,透明地将RAM页移动到交换分区或从交换分区到RAM页,tmpfs文件系统需要VM子系统的页面来存储文件。tmpfs自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。

tmpfs基于内存,因而速度是相当的,另外tmpfs使用的VM资源是动态的,当删除tmpfs中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,当然在其中创建文件时也会动态的分配VM资源。另外,tmpfs不具备持久性,重启后数据不保留,原因很明显,它是基于内存的。

编译内核时,启用“Virtual memory file system support”就可以使用tmpfs,linux kernel从2.4以后都开始支持tmpfs。目前主流的linux系统默认已启用tmpfs,如Redhat。

什么是/dev/shm?

看到dev大家都使知道它是一个设备文件。使用tmpfs文件系统,在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。如我的虚拟机装的是CentOS6.0,分配内存为1G,所以/dev/shm为500M左右。

[root@GoGo tmp]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             8.8G  4.0G  4.5G  48% /

tmpfs                 499M   88K  499M   1% /dev/shm

/dev/sda1              97M   43M   50M  47% /boot

tmpfs是基于内存的文件系统,创建时不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改为512M.

#vi /etc/fstab

tmpfs       /dev/shm    tmpfs  defaults   0   0

更改为

tmpfs       /dev/shm    tmpfs  defaults,size=512m   0    0

[root@GoGo tmp]# mount -o remount /dev/shm

[root@GoGo tmp]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             8.8G  4.0G  4.5G  48% /

tmpfs                 512M   88K  512M   1% /dev/shm

/dev/sda1              97M   43M   50M  47% /boot

怎么样,变成512M啦,使用很方便吧,哈哈。

当然在生产环境中你可以把内存加大些,反正现在内存很便宜啦,为了提高性能也需要将/dev/shm加大。如:

mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

nr_innodes指定索引节点数,nodiratime  man中解释如下:

nodiratime  Do  not  update directory inode access times on this filesystem.

不更新目录被访问时inode中的记录信息,noatime同理,好处你懂的。

tmpfs应用

tmpfs是基于内存的,速度是不用说的,硬盘和它没法比。

Oracle 中的Automatic Memory Management特性就使用了/dev/shm。

swap
swap是Linux的虚拟内存, 即在硬盘上开辟空间当内存不够时充当内存使用, 因此可以理解为当/dev/shm空间不够时可以占用swap的空间
Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。Swap空间
的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释
放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢
复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。有的程序会打开一些文件,对文件进行读写,当需要将这些程序的内存空间交换
出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因
为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则
不同,它们需要swap空-间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中
的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。  
swap配置对性能的影响  
 
 分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果
Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无
法启动,通常会出现“application is out
ofmemory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。通常情况下,Swap空间应大于或等于物理
内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。 另外,Swap分区的数量对性能也有很大的影响。因为Swap交
换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap
交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并
不很忙,而系统却慢。这说明,瓶颈在IO上,依靠
提高CPU的速度是解决不了问题的。

swap分区

 第一种方法:
 1.fdisk  /dev/sda
 2.n       (新建一个分区为/dev/sda6)
 3.t        (修改分区的id)
 4.82     (swap的id为82)
 5.w       (重写分区表)
 6.partprobe  (同步内存和分区表信息)
 7.mkswap /dev/sda6   (格式化成swap分区)
 8.swapon /dev/sda6   (打开swap分区)
 9.vim /etc/fstab           (在fstab中增加一条记录如下)
 /dev/hda6    swap   swap defaults 0 0
 10.mount -a

 第二种方法:
 1.dd if=/dev/zero of=/opt/swapfile bs=1M count=1000   (创建一个1G的文件作为交换分区使用)
 2.mkswap /opt/swapfile   (格式化成swap分区)
 3.swapon /opt/swapfile   (打开swap分区)
 4.vim /etc/fstab           (在fstab中增加一条记录如下)
 /opt/swapfile    swap   swap defaults 0 0
 5.mount -a

tmpfs 对oracle的影响
1.初始化参数MEMORY_TARGET或MEMORY_MAX_TARGET不能大于共享内存(/dev/shm),为了解决这个问题,可以增大/dev/shm

在oracle
11g中新增的内存自动管理的参数MEMORY_TARGET,它能自动调整SGA和PGA,这个特性需要用到/dev/shm共享文件系统,而且要求
/dev/shm必须大于MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就会报错

如:
如果更改tmpfs来可以让下面的方法

# mount -t tmpfs shmfs -o size=7g /dev/shm

在oracle
11g中新增的内存自动管理的参数MEMORY_TARGET,它能自动调整SGA和PGA,这个特性需要用到/dev/shm共享文件系统,而且要求
/dev/shm必须大于MEMORY_TARGET,如果/dev/shm比MEMORY_TARGET小就会报错

如:
如果更改tmpfs来可以让下面的方法

mount -t tmpfs shmfs -o size=7g /dev/shm

时间: 2024-09-29 07:32:28

linux tmpfs和swap介绍的相关文章

Linux curl使用简单介绍

<转自:http://www.cnblogs.com/-clq/archive/2012/01/29/2330827.html> Linux curl使用简单介绍[日期:2008-01-29]     来源:Linux公社  作者:notech Curl是Linux下一个很强大的http命令行工具,其功能十分强大. 1) 二话不说,先从这里开始吧! $ curl http://www.linuxidc.com 回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了  

Linux系统添加swap分区教程介绍

什么是交换内存(swap)? 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换.与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率. VirtualMem01.png   注意:虚拟内存不只是"用磁盘空间来扩展物理内存"的意思--这只是扩充内存级别以使

关于 Linux containers 配置文件简单介绍

1.Cgroup部分(所有Cgroup子系统的配置参数均可以通过lxc-cgroup 命令进行动态获得或者调整) LXC采用Cgroup来对容器进行资源管理,因此Cgroup的各个子系统均可以使用.实际上使用LXC之前,必须执行mount none -t cgroup /cgroup 挂载cgroup,或者采用echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab让系统每次启动自动挂载Cgroup.这样以来Cgroup的所

linux sudo命令用法介绍

1.sudo介绍 sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等.这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性.Sudo不是对shell的一个代替,它是面向每个命令的.它的特性主要有这样几点: sudo能够限制用户只在某台主机上运行某些命令. sudo提供了丰富的日志,详细地记录了每个用户干了什么.它能够将日志传到中心主机或者日志服务器. sudo使用时间戳文件--日志

如何管理配置Linux下的Swap交换分区

理解什么是swap分区 Swap是Linux下的虚拟内存分区,他的主要作用是在物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,让当前的程序来使用,这些内存释放出来的空间没有什么操作的程序,这些释放的内存将被保存到swap空间中,等到这写程序在运行的时候,再从swap虚拟空间来读取这些程序给内存来使用.这样中是在系统内存不够用的时候,进行交换.在针对Linux web服务器的时候,调整swap能提高系统很大的性能. 现在操作系统都突破了物理内存的限制,让程序可以操作大于物理内存的空间

linux之虚拟内存相关介绍

什么是虚存?为什么需要它? 我们知道程序代码和数据必须驻留在内存中才能得以运行,然而系统内 存数量很有限,往往不能容纳一个完整程序的所有代码和数据,更何况在多任务系统中,可能需要同时打开子处理程序,画图程序,浏览器等很多任务,想让内存驻 留所有这些程序显然不太可能.因此首先能想到的就是将程序分割成小份,只让当前系统运行它所有需要的那部分留在内存,其它部分都留在硬盘.当系统处理完当 前任务片段后,再从外存中调入下一个待运行的任务片段.的确,老式系统就是这样处理大任务的,而且这个工作是由程序员自行完

LINUX下的文件结构介绍

/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录(呵呵,特权阶级) /mnt 系统提供这个目录是让用户临时挂载

linux系统添加swap虚拟内存与删除配置

  1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中.这样,系统总是在物理内存不够时,才进行Swap交换. 其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap,有时可以越过系统性能瓶

Linux内核开发工具介绍

进行嵌入式Linux产品开发,往往需要对内核进行裁剪和定制,以满足嵌入式产品的功能和性能需求.本文介绍几种阅读Linux内核源码的工具和方法. 这里所说的"Linux内核开发"仅仅是指嵌入式Linux产品开发中内核和驱动相关开发工作,与Linux所领导的内核开发团队的内核开发有很大不同. 俗话说"工欲善其事,必先利其器",面对几百兆的Linux内核代码,要阅读.查看或者搜索其中的代码,大部分初次接触到Linux内核代码的开发人员,都有无从下手的感觉.下面推荐几个源码