Linux配置swap交换分区
侧边栏壁纸
  • 累计撰写 189 篇文章
  • 累计收到 1,259 条评论

Linux配置swap交换分区

萧瑟
2021-09-29 / 4 评论 / 403 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年10月27日,已超过1077天没有更新,若内容或图片失效,请留言反馈。

swap交换分区

Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

用于当物理内存不足时,调用硬盘的一部分来充当内存使用,这个就是所谓的虚拟内存。其类似Windowspagesfile.sys.

swap分区大小

分区时一般设定:swap分区的大小=1.5*物理内存容量。当内存比较小的时候(8G或8G以下),可以为内存的1.5-2倍(因为内存小时候,内存很容易被充满,这个时候就要把交换分区分大点)。

正常情况下,当内存充足的时候,swap分区是不会被使用的,因此,一旦发生内存充足时,而swap使用了很多,说明应用程序等进程有内存泄露,此时就要和开发程序人员一起来分析哪里内存泄露,当系统使用swap分区用的越多,系统性能反而会下降,某些大型数据库也可能不使用swap分区,也是可以考虑的,不过,这也会带来内存耗尽,服务直接挂掉的风险。而swap是内存不够时的一个缓冲地带。虽然慢,服务器不会挂掉,这点就仁者见仁了。

配置教程

1.检查当前的分区情况

## 使用free -m 或cat /proc/swaps 
[root@localhost ~]# free -m 
              total        used        free      shared  buff/cache   available
Mem:           3789        1368        1037           0        1383        2129
Swap:          0           0           0

2.增加交换分区文件及大小
检查没有swap,下面就需要增加: 判定新交换文件的大小,将大小乘以1024来判定块的大小。
例如,大小为64MB的交换文件的块大小为65536,在 shell 提示下以根用户身份键入以下命令,其中的 count 等于想要的块大小。

[root@localhost ~]# dd if=/dev/zero of=/var/swap bs=1024 count=4096000 
[root@localhost ~]# ll /var/swap 
-rw-r--r-- 1 root root 4194304000 Sep 29 01:02 /var/swap 
[root@localhost ~]# ll -h /var/swap 
-rw-r--r-- 1 root root 4.0G Sep 29 01:02 /var/swap 

3.使用以下命令来设置交换文件

[root@localhost ~]# mkswap /var/swap no label, UUID=fe9d1189-aaa7-4744-a056-5126ee051632 

4.启用交换分区文件 要立即启用交换文件而不是在引导时自动启用,使用以下命令

[root@localhost ~]# swapon /var/swap 

检查增加后的交换情况

[root@localhost ~]# free -m 
              total        used        free      shared  buff/cache   available
Mem:           3789        1368        1037           0        1383        2129
Swap:          4096           0           0

5.配置开机挂载
要在引导时启用,编辑 /etc/fstab 文件来包含以下行

/var/swap swap swap defaults 0 0 
## 操作挂载文件时,一定要备份,否则修改失败时,会造成不能开机的危险。 
[root@localhost ~]# cp /etc/fstab /etc/fstab.bak ## 备份完毕后,检查是否备份成功
[root@localhost ~]# ll /etc/fstab*      
-rw-r--r-- 1 root root 407 Sep 29 01:06 /etc/fstab 
-rw-r--r-- 1 root root 350 Sep 29 01:03 /etc/fstab.bak ## 修改完挂载文件后查看 
[root@localhost ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Mar  7 06:38:37 2019
#
# 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
#
UUID=4b499d76-769a-40a0-93dc-4a31a59add28 /                       ext4    defaults        1 1
/var/swap                                 swap                    swap    defaults        0 0

至此 swap 配置完成,重启也不会失效。

实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置 swap 的值。而 swap 分区并不是等所有的物理内存都消耗完毕之后,才去使用,什么时候使用是由 swappiness 参数值控制。

# 该值在centos 7上默认值是30,在Centos 6上是60,可以看出新版本的linux已经在根据内存大小趋势做出一定的调整。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
cat /proc/sys/vm/swappiness

修改swappiness参数

## 临时性修改
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
## 永久修改:
vim /etc/sysctl.conf
vm.swappiness=30

评论 (4)

取消
  1. 头像
    zeruns
    广东省佛山市 Windows 10 · Google Chrome

    你这文章里设置后swap怎么还是0

    回复
    1. 头像
      萧瑟 作者
      北京市 Windows 10 · Google Chrome
      @ zeruns

      感谢指正,写的时候,复制上面的忘记改了表情

      回复
      1. 头像
        zeruns
        广东省佛山市 Windows 10 · Google Chrome
        @ 萧瑟

        还有你的命令上bs=4096 count=1024000 ,bs是指块大小,你设的是4096字节,相当于4KB,count是多少个块,我建议块大小1024比较好,然后后面填count时就容易看出是多大的

        回复
        1. 头像
          萧瑟 作者
          北京市 Windows 10 · Microsoft Edge
          @ zeruns

          非常感谢指正,已改正,顺便加了swappiness修改。

          回复