前言:
作为DBA,内存的使用情况是重要的监控指标之一,了解内存使用很重要。下面有一个系统参数,对于内存的调用起到重要的作用。大家可以了解一下。
简介swap
Swap全称为swap place,即交换分区,它是使用磁盘空间虚拟出来的虚拟内存。当物理内存不够的时候,非活动页面将从RAM移动到交换空间(虚拟内存)。一般Linux中页的大小设置为4Kb。而内存与磁盘则是按照块来交换数据的。
简介swappiness
Swappiness 是一个 Linux 内核属性,用于设置将页面从物理内存交换到交换空间以及从页面缓存中删除页面之间的平衡。它基本上定义了系统使用交换空间的频率。
swappiness = 0 ,表示最大限度使用物理内存,物理内存不足时,使用swap空间。
swappiness=100 ,表示积极的使用swap分区,并把内存上的数据及时的搬运到swap空间里。
linux的基本默认设置为60。(取值范围0~100)
对于大多数数据库服务器,建议使用swappiness值为0或1。
注:当物理内存和swap都被使用完那么就会出错,如:out of memory(OOM)。
swap只是page reclaim的一种处理措施,主要针对anon page。
页回收大体流程会先在每个zone上扫描相应的page链表,主要包括inactive anon/active anon(匿名页链表)以及inactive file/active file链表(file cache/映射页链表),一共四条链表,我们所有使用过的page在被回收前基本是保存在这四条链表中的某一条中的(还有一部分在unevictable链表中,忽略),根据其被引用的次数会决定其处于active还是inactive链表中,根据其类型决定处于anon还是file链表中。
页回收总体会扫描逐个内存节点的所有zone,然后先扫描active,将不频繁访问的页挪到inactive链表中,随后扫描inactive链表,会将其中被频繁引用的页重新挪回到active中,确认不频繁的页则最终被回收,如果是file based的页则根据是否clean进行释放或回写(writeback,filecache则直接释放),如果是anon则进行swap,所以swappiness参数对anon链表扫描的影响。
查看并修改参数swappiness
1、查看目前参数值
cat /proc/sys/vm/swappiness
2、修改参数值
临时调整的方法如下:
[root@test ~]# sysctl vm.swappiness=20
vm.swappiness = 20
要想永久调整的话,需要在/etc/sysctl.conf中修改:
[root@test ~]# cat /etc/sysctl.conf
vm.swappiness=20
激活设置
[root@timeserver ~]# sysctl -p
禁用swap(不建议使用)
1、临时禁用
禁用:
sudo swapoff -a
启用:
sudo swapon -a
2、永久禁用
把根目录文件系统设为可读写:
sudo mount -n -o remount,rw /
用vi修改/etc/fstab文件,在swap分区这行前加 # 禁用掉,保存退出
vi /etc/fstab
重新启动电脑。
参考:swappiness、OOM。




