欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux中swap管理分区

程序员文章站 2022-06-03 07:50:55
...

1、swap是什么?

swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

2、为什么需要swap?

要回答这个问题,就需要回答swap给我们带来了哪些好处。

  • 对于一些大型的应用程序(如LibreOffice、video editor等),在启动的过程中会使用大量的内存,但这些内存很多时候只是在启动的时候用一下,后面的运行过程中很少再用到这些内存。有了swap后,系统就可以将这部分不这么使用的内存数据保存到swap上去,从而释放出更多的物理内存供系统使用。
  • 很多发行版(如ubuntu)的休眠功能依赖于swap分区,当系统休眠的时候,会将内存中的数据保存到swap分区上,等下次系统启动的时候,再将数据加载到内存中,这样可以加快系统的启动速度,所以如果要使用休眠的功能,必须要配置swap分区,并且大小一定要大于等于物理内存
  • 在某些情况下,物理内存有限,但又想运行耗内存的程序怎么办?这时可以通过配置足够的swap空间来达到目标,虽然慢一点,但至少可以运行。
  • 虽然大部分情况下,物理内存都是够用的,但是总有一些意想不到的状况,比如某个进程需要的内存超过了预期,或者有进程存在内存泄漏等,当内存不够的时候,就会触发内核的OOM killer,根据OOM killer的配置,某些进程会被kill掉或者系统直接重启(默认情况是优先kill耗内存最多的那个进程),不过有了swap后,可以拿swap当内存用,虽然速度慢了点,但至少给了我们一个去debug、kill进程或者保存当前工作进度的机会。
  • 如果看过Linux内存管理,就会知道系统会尽可能多的将空闲内存用于cache,以加快系统的I/O速度,所以如果能将不怎么常用的内存数据移动到swap上,就会有更多的物理内存用于cache,从而提高系统整体性能。

3、基础命令:

mkswap /devices : 格式化成swap格式
swapon /devices : **swap ,加入到swap分区中
开机自动启动新添加的swap分区: /etc/fstab /devices swap swap defaults 0 0

实验

1、建立分区

[[email protected] localhost ~]# gdisk /dev/sdb
Command (? for help): n                    # 新建分区
Partition number (2-128, default 2):       # 回车
First sector (34-41943006, default = 2099200) or {+-}size{KMGTP}:           # 回车
Last sector (2099200-41943006, default = 41943006) or {+-}size{KMGTP}: +1G  # 给1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):  # 回车
Changed type of partition to 'Linux filesystem'

Command (? for help): w     # 保存
Do you want to proceed? (Y/N): y

2、查看是否分区成功

[[email protected] localhost ~]# ll /dev/sdb*
brw-rw----. 1 root disk 8, 16 2月  26 15:36 /dev/sdb
brw-rw----. 1 root disk 8, 17 2月  26 15:36 /dev/sdb1
brw-rw----. 1 root disk 8, 18 2月  26 15:37 /dev/sdb2

3、格式化

[[email protected] localhost ~]# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=bf1788b2-c1f5-4f89-bb62-cd91617ee8dc

# 对比( **swap空间之前的对比)
[[email protected] localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         454        2938          14         378        3082
Swap:          2047           0        2047
[[email protected] localhost ~]# swapon /dev/sdb2 
[[email protected] localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         452        2940          14         377        3084
Swap:          3071           0        3071

使用 文件增加swap空间?
阿里云默认的没有swap空间,如何增加swap?

1) 使用dd命令创建个500M大小的文件
[[email protected] localhost ~]# dd  if=/dev/zero of=swap_file bs=1M count=500
记录了500+0 的读入
记录了500+0 的写出
524288000字节(524 MB)已复制,12.2954 秒,42.6 MB/秒
[[email protected] localhost ~]# ll -h swap_file 
-rw-r--r--. 1 root root 500M 2月  26 15:46 swap_file
[[email protected] localhost ~]# chmod 0600 swap_file 

2) 把500M的文件格式化成swap 
[[email protected] localhost ~]# mkswap -f swap_file 
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=def65bf9-7143-4734-9801-d3d8bb583061
[[email protected] localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         455        2423          14         891        3075
Swap:          3071           0        3071

3) **swap空间
[[email protected] localhost ~]# swapon /root/swap_file

4) 查看是否被**
[[email protected] localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         456        2423          14         891        3074
Swap:          3571           0        3571