swap相关的概念和操作

来源:互联网 发布:淘宝智能机器人好用吗 编辑:程序博客网 时间:2024/06/14 03:34

首先声明,与swap相关的操作需要superuser身份。

1. 简单理解swap

简单的说,swap就是在磁盘上划定一块空间。当内存不够用时,系统会将一些不活跃的内存页调出并写入到到swap空间,这个过程称为swap out;之后如果需要这些内存页时,又会将其从swap空间调入内存,这个过程称为swap in。

2. 添加swap

a) 查看当前swap
# swapon -sFilename                                Type            Size    Used    Priority/dev/dm-1                               partition       4095992 0       -1

可以看到:当前已有一个swap分区,大小为4095992B

b) 创建一个空文件

dd if=/dev/zeror of=/swapfile bs=1024 count=1048576  //文件大小1GB

c) 将文件用作swap:mkswap /swapfile

d) 开启文件swap:swapon /swapfile

e) 查看添加后的swap

# swapon -sFilename                                Type            Size    Used    Priority/dev/dm-1                               partition       4095992 0       -1/swapfilefile            1048568 0       -2

可以看到:已经添加了一个类型为文件的swap。

f) 查看文件swap的UUID

#blkid /swapfile/swapfile: UUID="261773a6-7217-4c5a-8245-d030eba56d13" TYPE="swap"

d) 让文件swap永久生效

修改/etc/fstab,添加新行:
UUID=261773a6-7217-4c5a-8245-d030eba56d13 swap          swap    defaults        0 0
记着将此处的UUID值改为你的呀......

如果缺失该步操作,重启机器后,文件swap不会被自动加载。

3. 禁用/关闭swap

swapoff /swapfile//禁用文件swapswapoff -a//禁用所有的swap,启用所有swap命令为:swapon -a

可以通过先禁用,再启动的方式,来擦除swap中已有的数据。

4. vm.swappiness与swap

vm.swappiness表示系统使用swap的可能性,取值为[0,100],值越大,可能性越高。值为0时,不是禁用swap,而是说尽可能的少swap out/in。从linux内核版本2.6.32-303.el6(对应到Centos release 6.4)开始,添加了一个patch,对swappiness为0的含义进行了更为严格的约束。下面为原文描述:

Author: Satoru Moriya <satoru.moriya@hds.com>

Date: Tue May 29 15:06:47 2012 -0700
mm: avoid swapping out with swappiness==0
Sometimes we'd like to avoid swapping out anonymous memory. In particular, avoid swapping out pages of important process or process groups while there is a reasonable amount of pagecache on RAM so that we can satisfy our customers' requirements.
OTOH, we can control how aggressive the kernel will swap memory pages with /proc/sys/vm/swappiness for global and /sys/fs/cgroup/memory/memory.swappiness for each memcg. But with current reclaim implementation, the kernel may swap out even if
we set swappiness=0 and there is pagecache in RAM.

This patch changes the behavior with swappiness==0. If we set swappiness==0, the kernel does not swap out completely (for global reclaim until the amount of free pages and filebacked pages in a zone has been reduced to something very very small (nr_free + nr_filebacked < highwatermark)).

可见,在新的内核版本里,swappiness为0的话,swap交换的可能性更是大大降低了。这样的一个坏处就是增大了OOM的可能性,所以建议此时将swappiness稍设大一点。

与该参数相关的一些操作:
#cat /proc/sys/vm/swappiness    //查看参数值,默认为60#sysctl vm.swappiness=10//设置参数为10.如要设置永久有效,需添加行vm.swappiness=10到/etc/sysctl.conf,否则系统重启后设置失效。

5. swap和tmpfs

本来这两个没有多少相关性,只是看网上许多人将两者混在一起了,故在此做个说明。

tmpfs是一个基于内存的虚拟文件系统,也就是说本质上和ext4是一类概念,只不过tmpfs基于内存,ext4基于磁盘。tmpfs其实基于虚拟内存(物理内存+swap),如此来说,swap和tmpfs还真有点关系了,即tmpfs这个文件系统,可将其管理的文件存储在swap中。

tmpfs的主要用途是提供比磁盘超快的文件访问速度。例如:有些应用将频繁访问的小文件,放在tmpfs挂载的目录下,文件访问其实是直接的内存访问,速度提升非常明显。

也是因为这个主要用途,决定了它几乎不会和swap有交集。试想:tmpfs系统管理的文件,放在swap和物理内存上,那个访问速度更快?答案不言而喻。所以默认情况下,tmpfs只使用物理内存,并且容量为物理内存的一半。

0 0
原创粉丝点击