Linux使用swap交换空间

刚刚买的服务器内存太小了,找了一下原来的命令,干脆搬到CSDN上。文档多了很难找

第一:创建swap

[root@iZbp1f0xuq9rc41s6gdvfyZ ~]# cd /mnt
[root@iZbp1f0xuq9rc41s6gdvfyZ mnt]# mkdir swap
[root@izwz99z5o9dc90keftqhlrz mnt]# dd if=/dev/zero of=/mnt/swap/swapfile bs=1M count=4096
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 37.1569 s, 116 MB/s

命令说明:创建一个4096M 的swap,耗时37S,平均速率:116MB/s

第二:开机自动加载

[root@izwz99z5o9dc90keftqhlrz mnt]# cd /mnt/swap
[root@izwz99z5o9dc90keftqhlrz swap]# mkswap swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=a392d881-3673-49da-a30c-f04c2fd7ee78

/mnt/swap  下面来操作
[root@izwz99z5o9dc90keftqhlrz mnt]# vim /etc/fstab
加入下面这一段:/mnt/swap/swapfile 上面我们创建的

/mnt/swap/swapfile   swap              swap        defaults        0 0

 第三:现在挂载使用

[root@izwz99z5o9dc90keftqhlrz swap]# swapon /mnt/swap/swapfile
swapon: /mnt/swap/swapfile: insecure permissions 0644, 0600 suggested.

[root@izwz99z5o9dc90keftqhlrz swap]# 

第四:卸载下来 

[root@izwz99z5o9dc90keftqhlrz swap]# swapoff /mnt/swap/swapfile

 

题外话: 

[root@izwz99z5o9dc90keftqhlrz swap]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        3.1G         75M        440K        621M        507M
Swap:          4.0G          0B        4.0G
[root@izwz99z5o9dc90keftqhlrz swap]# 

第五:swap推荐设置

4G以内的物理内存,SWAP 设置为内存的2倍。
 
4-8G的物理内存,SWAP 等于内存大小。
 
8-64G 的物理内存,SWAP 设置为8G。
 
64-256G物理内存,SWAP 设置为16G。

第六:swappiness到底是用来调节什么的?

系统使用swap的规则阈值(实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。

# 查看当前设置
cat /proc/sys/vm/swappiness
 
# swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间。
# swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
 
# 临时修改
sysctl vm.swappiness=80
 
#永久修改,在/etc/sysctl.conf 文件里添加如下参数:
 
vm.swappiness=10

使配置立即生效
/sbin/sysctl -p
我一般设置 swappiness = 80
[root@izwz99z5o9dc90keftqhlrz ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        2.5G         379M         92K        828M        121M
Swap:          4.0G        141M        3.9G
[root@izwz99z5o9dc90keftqhlrz ~]# 

一些重要的细节如下:

很多人应该都知道/proc/sys/vm/swappiness这个文件,是个可以用来调整跟swap相关的参数。这个文件的默认值是60,可以的取值范围是0-100。

这很容易给大家一个暗示:我是个百分比哦!

那么这个文件具体到底代表什么意思呢?我们先来看一下说明:

======
swappiness

This control is used to define how aggressive the kernel will swap memory pages. Higher values will increase agressiveness, lower values decrease the amount of swap.
A value of 0 instructs the kernel not to initiate swap until the amount of free and file-backed pages is less than the high water mark in a zone.
The default value is 60.
======

这个文件的值用来定义内核使用swap的积极程度:

值越高,内核就会越积极的使用swap;
值越低,就会降低对swap的使用积极性。
如果这个值为0,那么内存在free和file-backed使用的页面总量小于高水位标记(high water mark)之前,不会发生交换。
在这里我们可以理解file-backed这个词的含义了,实际上就是上文所说的文件映射页的大小。

那么这个swappiness到底起到了什么作用呢?

我们换个思路考虑这个事情。假设让我们设计一个内存回收机制,要去考虑将一部分内存写到swap分区上,将一部分file-backed的内存写回并清空,剩余部分内存出来,我们将怎么设计?

我想应该主要考虑这样几个问题:

如果回收内存可以有两种途径(匿名页交换和file缓存清空),那么我应该考虑在本次回收的时候,什么情况下多进行file写回,什么情况下应该多进行swap交换。说白了就是平衡两种回收手段的使用,以达到最优。

如果符合交换条件的内存较长,是不是可以不用全部交换出去?比如可以交换的内存有100M,但是目前只需要50M内存,实际只要交换50M就可以了,不用把能交换的都交换出去。

分析代码会发现,Linux内核对这部分逻辑的实现代码在get_scan_count()这个方法中,这个方法被shrink_lruvec()调用。

get_sacn_count()就是处理上述逻辑的,swappiness是它所需要的一个参数,这个参数实际上是指导内核在清空内存的时候,是更倾向于清空file-backed内存还是更倾向于进行匿名页的交换的。

当然,这只是个倾向性,是指在两个都够用的情况下,更愿意用哪个,如果不够用了,那么该交换还是要交换。

简单看一下get_sacn_count()函数的处理部分代码,其中关于swappiness的第一个处理是:
 

这里注释的很清楚:

如果swappiness设置为100,那么匿名页和文件将用同样的优先级进行回收。

很明显,使用清空文件的方式将有利于减轻内存回收时可能造成的IO压力。

因为如果file-backed中的数据不是脏数据的话,那么可以不用写回,这样就没有IO发生,而一旦进行交换,就一定会造成IO。

所以系统默认将swappiness的值设置为60,这样回收内存时,对file-backed的文件cache内存的清空比例会更大,内核将会更倾向于进行缓存清空而不是交换。这里指老版本的Linux,现在我们的系统基本都是设置为0.因为swap都是我们自己配置的

这里的swappiness值如果是60,那么是不是说内核回收的时候,会按照60:140的比例去做相应的swap和清空file-backed的空间呢?并不是。

参考来自:

CentOS7下面的swap分区的使用

Linux SWAP 深度解读

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值