一、相关背景
1.1 历史背景
- 早前程序要运行,都必须将其载入到内存中才能运行。
- 因此不同的程序之间会存在对资源的恶性竞争,例如篡改其他程序的数据。
- 以前内存资源不足时,需要把所有在内存中的数据交换到交换空间,导致进程效率低。
1.2 内存管理基本概念
https://blog.csdn.net/zhouziyu2011/article/details/60604539
- 线性地址
- 逻辑地址
- 物理地址
- 虚拟地址
二、swap space的相关概念
- 什么时候使用swap space?
物理内存(RAM)满了之后。
- 会把内存中的哪些数据移动到swap space?
不同于从前,现在是把内存中的非活动页面移动到swap space。
- 如何访问swap space里面的数据?
仍然需要先把swap space里面的数据移动回内存再访问。
- swap space以什么形式存在?
- 分区
- swap files
- 分区和swap files组合
- swap space的分区大小该如何设置?
- 4G以内的物理内存:swap sapce的大小应设置成物理内存大小的两倍。
- 4~8G的物理内存:swap sapce的大小应设置成内存大小。
- 8~64G的物理内存:swap sapce的大小应设置成8G。
- 64G以上的物理内存:swap sapce的大小应设置成16G。
- 如何查看swap space的使用界限。
- 通过
/proc/sys/vm/swappiness
内的参数查看:这里的数值是百分比数值,表示当剩余物理内存的百分之多少事使用swap space。
[root@Tyson'sComputer ~]# cat /proc/sys/vm/swappiness
30
三、管理swap space
3.1 修改swappniess参数
- 临时修改
[root@Tyson'sComputer ~]# sysctl vm.swappiness=10
vm.swappiness = 10
- 重启就会失效
- 永久修改:
echo 'vm.swappiness=10'>>/etc/sysctl.conf
- 需要重启生效
3.2 查看swap space大小
free -m
中swap栏目就是
[root@Tyson'sComputer ~]# free -m
total used free shared buff/cache available
Mem: 976 213 557 6 205 579
Swap: 2047 0 2047
3.3 查看swap space的使用情况
vmstat
报告中的swap栏目
[root@Tyson'sComputer ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 571356 2116 208004 0 0 12 1 46 53 0 0 100 0 0
Swap
- si: Amount of memory swapped in from disk (/s).
- so: Amount of memory swapped to disk (/s).
3.4 验证swap space状态
- Get info:
swapon -s
,–summary,display summary about used swap devices
[root@Tyson'sComputer ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -1
3.5 打开或关闭 swap分区
swapon
,swapoff
- enable/disable devices and files for paging and swapping
[root@Tyson'sComputer ~]# swapoff /dev/dm-1
[root@Tyson'sComputer ~]# swapon -s
[root@Tyson'sComputer ~]# swapon /dev/dm-1
[root@Tyson'sComputer ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -1
3.6 swap patition 开机自启动
- 需要在
/etc/fstab
中配置,该配置文件是用来自动挂载这里声明的分区的。
[root@Tyson'sComputer ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Jan 2 17:01:36 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
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=350fe0f8-cb08-4651-98ed-7f660b6bbb76 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
3.7 增加swap partition的大小
- 使用文件作为swap交换分区的。首先在根目录下创建文件
[root@Tyson'sComputer ~]# dd if=/dev/zero of=/swap-type-file bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 26.6993 s, 40.2 MB/s
[root@Tyson'sComputer ~]# ll -h /swap-type-file
-rw-r--r--. 1 root root 1.0G Feb 14 12:23 /swap-type-file
- 然后对该用作交换空间的文件进行安全性设置
[root@Tyson'sComputer ~]# chmod 600 /swap-type-file
[root@Tyson'sComputer ~]# chown root:root /swap-type-file
[root@Tyson'sComputer ~]# ll /swap-type-file
-rw-------. 1 root root 1073741824 Feb 14 12:23 /swap-type-file
- 需要注意的是:即使将该文件的权限等属性设置成这样普通用户仍能使用交换空间,是通过内核实现的。
- 将生成的文件格式化成交换分区并启用
[root@Tyson'sComputer ~]# mkswap /swap-type-file
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=c526ab2e-b971-468f-b442-71fabd58d0af
[root@Tyson'sComputer ~]# swapon /swap-type-file
[root@Tyson'sComputer ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -1
/swap-type-file file 1048572 0 -2