Linux ❉ swap详解

一 介绍

        swap 分区就是交换分区,(windows平台叫虚拟内存),在物理内存不够用时,操作系统会从物理内存中把部分暂时不被使用的数据转移到交换分区,从而为当前运行的程序留出足够的物理内存空间。

        swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

        现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。

        如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness,如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。
 

        swap启用后,在使用磁盘空间和内存交换数据时,性能表现会较差,会减慢程序执行的速度,有的软件的设计师不想使用swap。

        例如:kubelet 在 1.8 版本以后强制要求 swap 必须关闭,否则会报错   

Running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false

        或者kubeadm init时会报错:

[ERROR Swap]: running with swap on is not supported. Please disable swap

二 查看swapon/swapoff所属的rpm包

[root@192 ~]# whereis swapoff
swapoff: /usr/sbin/swapoff /usr/share/man/man2/swapoff.2.gz /usr/share/man/man8/swapoff.8.gz
[root@192 ~]# whereis swapon
swapon: /usr/sbin/swapon /usr/share/man/man2/swapon.2.gz /usr/share/man/man8/swapon.8.gz

[root@192 ~]# rpm -qf /usr/sbin/swapon
util-linux-2.23.2-63.el7.x86_64
[root@192 ~]# rpm -qf /usr/sbin/swapoff 
util-linux-2.23.2-63.el7.x86_64


# 如果删除了可以用yum安装,centOS 8 和redhat 8 也可以用dnf
[root@192 ~]# yum install util-linux

三 查看swap当前状态

# 查看swap的空间,共4G

[root@192 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         462        2947          24         522        3225
Swap:          3967           0        3967

# 用swapon查看所属设备和大小:
#-v: --verbose                 详尽模式
[root@192 ~]# swapon -v
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition 3.9G   0B   -2

四 临时关闭swap

# 查看swapoff的版本
[root@192 ~]# swapoff --version
swapoff from util-linux 2.23.2
# 关闭swap
#-a:all,禁用 /proc/swaps 中的所有交换区
[root@192 ~]# swapoff -a

# 检查效果
[root@192 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         460        2948          24         522        3227
Swap:             0           0           0
# 用swapon检查,输出为空,表示swap已关闭
[root@192 ~]# swapon -v

        临时关闭swap后启用swap

# 查看swapon的版本
[root@192 ~]# swapon --version
swapon from util-linux 2.23.2

# 启用 swap
#-a:--all    启用 /etc/fstab 中的所有交换区
[root@192 ~]# swapon -a
# 效果 可以看到swap的空间显示为4G
[root@192 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         462        2947          24         522        3225
Swap:          3967           0        3967
# 用swapon -v查看
[root@192 ~]# swapon -v
NAME      TYPE      SIZE USED PRIO
/dev/dm-1 partition 3.9G   0B   -2

五 永久关闭

# 查看/etc/fstab,找到swap分区的记录:
[root@192 ~]# more /etc/fstab

#
# /etc/fstab
# Created by anaconda on Mon Dec 27 15:36:24 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=8c69334a-17bb-4043-85c9-b8f3788dfc7c /boot                   xfs     defaults        0 
0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
# 把加载swap分区的那行记录注释掉即可

# 重启机器,再用free -m检查一下
[root@192 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3931         460        2948          24         522        3227
Swap:             0           0           0

六 扩展-Windows相关

        Windows有没有Swap呢?

        有,名曰虚拟内存

        右键点击“我的电脑”,选择“属性”(我的是win 10),在打开的面板中依次打开“高级系统设置”—“高级”选项卡—“设置”—“高级”选项卡—“更改”,就进入了虚拟内存的设置界面

 

        windows是默认是所有驱动器都有个3840M的虚拟内存(好特么鸡贼)

 

        将“自动管理所有驱动器的分页文件大小”选项前的方框里的勾取消,选择一个盘符(尽量是非系统盘),选择自定义大小,将初始大小和最大值尽量设置为同一数值(可以根据自己电脑的物理内存设置,如电脑物理内存是2GB,就在3GB到6GB之间选择一个数值),然后点击“设置”,最后点击“确定”并重启电脑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值