刚刚买的服务器内存太小了,找了一下原来的命令,干脆搬到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的空间呢?并不是。
参考来自:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/160898.html