简介
Linux中Swap(即: 交换分区),类似于Windows的 虚拟内存,就是当 内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。Android是基于Linux的操作系统,所以也可以使用 Swap分区来提升系统运行效率 [1]  
交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。
2SWAP分区分析
SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用 [1]  
它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。
需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存。SWAP分区只是临时的解决办法.
交换分区(swap)的合理值一般在内存的2倍左右?
一种流行的、以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍。也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间。其实这是严重的浪费。真实的情况是:可以根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区!
----------------------------------------------------------------------------------------------
查看swap的空间大小
[jonny@localhost~]$free-m
totalusedfreesharedbufferscached
Mem:998977200053
-/+buffers/cache:92275
Swap:201572008
Mem行显示了从系统角度看来内存使用的情况,total是系统可用的内存大小,数量上等于系统物理内存减去内核保留的内存。
  buffers和cached是系统用做缓冲的内存。buffers与某个块设备关联,包含了文件系统元数据,并且跟踪了块的变化。cache只包含了文件本身。
-/+buffers/cache行则从用户角度显示内存信息,可用内存从数量上等于mem行used列值减去buffers和cached内存的大小。
因为buffers和cached是操作系统为加快系统运行而设置的,当用户需要时,可以只接为用户使用。
Swap行便是系统的swap信息。
在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存。那么,万一有一天你需要了呢,难道要重装系统?大可不必,在Linux下虚拟内存不单可以放在单独的交换分区,也可以是一个在正常分区下的交换文件。
查看swap空间(file(s)/partition(s))
包括文件和分区的详细信息
#swapon-s
  等价于
  #cat/proc/swap
[jonny@localhost~]$cat/proc/swaps
FilenameTypeSizeUsedPriority
/dev/sda3partition2064344126768-1
[jonny@localhost~]$swapon-s
FilenameTypeSizeUsedPriority
/dev/sda3partition2064344126768-1
swap越大越好吗?
有人对Swap分区大小的设置这样评论过:“只要不怕浪费硬盘的话越大越好,因为linux内核在物理内存完全用完之前不会去动swap” 不过根据我的经验,可能不是这样喔!太大的 swap 空间会造成 kernel 以为有巨大的内存空间而毫不节制的想要把数据捉进内存中,从而导致 kernel 一直在做 memory swap,连带拖慢系统响应时间。 
老实说,1G RAM 如果不跑 p2p 之类的东西,那设个 256MB 就够用了;有 2G 的话连设都不要设。 
另外如果说真的因为某一软件确实需要巨大内存空间才能运作的话,那只好在 swap 上动手脚,但为了效能最好分散在多个实体硬盘上(等于类似 raid 效果)! 其实如何设置Swap分区的大小是最能检查一个Linux系统管理员的水平的测试,Swap到底该如何设置呢?我是这样认为的:首先我们需要了解这台服务器都要运行哪些程序、他们各自占用的内存大小为多少,经过确切的检查后,Swap分区的大小可以这样确定: ( 内存大小 + Swap分区大小 ) * 80%或70% = 程序需要占用总内存数 Swap分区在程序测试期间也有很大的用途,例如管理员能够通过Swap分区的使用状况,监测系统内存是否出现泄露,同时对Web项目等应用也可以提供一个比较好的流量峰值缓冲作用。一个Linux系统管理员要能够通过监测Swap分区的使用情况,对系统、程序有一个合理的评价。


linux下调整swap空间 
 在SWAP空间不够用的情况下,如何手工添加SWAP空间

    以下的操作都要在root用户下进行,首先先建立一个分区,采用dd命令比如


dd if=/dev/zero of=/home/swap bs=1024 count=1024000

这样就会创建/home/swap这么一个分区文件。文件的大小是1024000个block,一般情况下1个block为1K,所以这里空间是1024M。接着再把这个分区变成swap分区。


/sbin/mkswap /home/swap

再接着使用这个swap分区。使其成为有效状态。


/sbin/swapon /home/swap

现在再用free -m命令查看一下内存和swap分区大小,就发现增加了1024M的空间了。不过当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。那我们需要修改/etc/fstab文件,增加如下一行


/home/swap swap swap defaults 0 0

你就会发现你的机器自动启动以后swap空间也增大了。 

-----------------------------------------------------------------------------------------

方法一:如果磁盘有剩余的空间,用分区工具新建一个swap分区.并写到/etc/fstab里面.
再 #swapon -a

方法二:可以用一个文件做交换分区.

1、建立swap文件,比如在/tmp下建立swapfree作为交换文件。建立
#dd if=/dev/zero of=swapfree bs=32k count=8192
(bs=32k指定每个扇区占用32kb,读入了8192+0个区段,输出了8192+0个区段) 
注意:bs参数的目的在于指定每次读取及输入多少个bytes;由于磁盘存取的最小单位为扇区,因此设置bs也等于设置每个扇区的大小;而count的目 的则在指定可以使用多少个扇区.因此,可以使用的硬盘空间就等于bs*count.以上范例为例,可以使用的硬盘空间等于32*8192=262144 (KB),亦等于256MB. )
执行上述命令后,会在/tmp目录中创建一个256MB的swapfree的文件 

2、 格式华及启动swap文件 
接下来执行mkswap命令,将myswap文件格式化成s文件系统,系统才能使用,切换到/tmp目录,并执行以下命令: 
# mkswap swapfree (#将文件格式化为swap文件格式) 
setting up swapspace version 1 , size = 262144 KB 
# swapon /tmp/swapfree (#启动swap分区) 
要停止使用新创建的swap文件,只要执行 swapoff /tmp/swapfree命令即可,如果swap交换文件不再使用,可以删除此文件。

3、检查swap
#swapon -s

4、 开机时自动启动新添加的swap分区 
如果每次开机后都要执行swapon命令启动swap分区或者文件,这太麻烦了.这时可以利用文字编辑器在/etc/fstab文件加一行,好让开机时自动启动swap分区及文件: 
/dec/hdb5 swap swap defaults 0 0 (开机时启动此swap分区) 
/tmp/swapfree swap swap defaults 0 0 (开机时启动此swap文件) .

swap空间大小:
通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有 不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服 务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。

swap数量:
Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于 所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待 状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。


swappiness

  swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60,具体如下:
    
[root@timeserver ~]# cat /proc/sys/vm/swappiness
60


也就是说,你的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。


临时调整的方法如下,我们调成10:


[root@timeserver ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@timeserver ~]# cat /proc/sys/vm/swappiness
10
这只是临时调整的方法,重启后会回到默认设置的


要想永久调整的话,需要将
需要在/etc/sysctl.conf修改,加上:
[root@timeserver ~]# cat /etc/sysctl.conf


# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10


[root@timeserver ~]# sysctl -p


这样便完成修改设置!




Logo

更多推荐