温故知新·Swap分区

众所周知,直接从物理内存(RAM)读写数据要比从硬盘(Desk)读写数据要快的多,但是内存大小是有限的,为了解决物理内存不足的问题,操作系统引入了虚拟内存的概念。

虚拟内存是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。

作为物理内存的扩展,内核会在物理内存不足时,会将暂时不用的内存块信息写到交换空间,这样物理内存得到了释放,当需要用到交换空间的数据时,又会被重新从交换空间读到物理内存。

Linux内核是以内存页为单位进行内存管理,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

swappniess

swappiness是Linux的一个内核参数,控制系统在进行swap时内存使用的相对权重。以下命令查看当前swappniess配置:

1
cat /proc/sys/vm/swappiness

swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存。swappiness=0的时候表示最大限度使用物理内存(设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性),然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

Ubuntu系统swappiness默认值为60,表示的含义可以这样来理解,当剩余物理内存低于40%(40=100-60)时,开始使用swap分区。CentOS系统此参数的默认值是30。

通常情况下:swap分区设置建议是内存的两倍 (内存小于等于4G时),如果内存大于4G,swap只要比内存大就行。另外尽量的将swappiness调低,这样系统的性能会更好。

修改swappniess参数

1
2
3
4
5
6
7
8
9
10
11
#临时性修改:
sysctl vm.swappiness=10

#永久性修改[root@wenwen ~]
vim /etc/sysctl.conf
# 加入参数
vm.swappiness = 35
# 重新加载配置
sysctl -p /etc/sysctl.conf
#查看是否生效:
cat /proc/sys/vm/swappiness

swap分区设置

查看swap分区的使用情况

在linux系统中,通常使用free -m来查看内存和swap分区的使用情况。

1
2
3
4
root@Devops:~$ free -m
total used free shared buff/cache available
Mem: 3823 1152 241 39 2428 2318
Swap: 0 0 0

其中 swap 表示交换分区使用情况。

创建swap分区

1
2
3
4
5
6
7
8
9
10
#创建 SWAP 文件,设置大小,这里设置为 1G。(bs * count = SWAP 大小)
dd if=/dev/zero of=/var/swap bs=1M count=1024
# 设置文件权限
chmod 600 /var/swap
# 创建 SWAP
mkswap /var/swap
# 启用
swapon /var/swap
# 查看 SWAP 状态
swapon -s 或者 free -m

查看 SWAP 状态:

1
2
3
root@Devops:~$ swapon -s
Filename Type Size Used Priority
/var/swap file 1048572 0 -1

添加开机启动:

1
2
# 在 /etc/fstab 中添加一行 /var/swap swap swap default 0 0
echo '/var/swap   swap   swap   default 0 0' >> /etc/fstab

删除Swap:

删除swap之前先要确保内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。

1
2
3
4
5
6
# 先停用
swapoff /var/swap
#再删除
rm -rf /var/swap
# 去掉开机启动
sed -i '/\/var\/swap   swap   swap   default 0 0/d'  /etc/fstab
有用就打赏一下作者吧!