[Linux]设置swap分区以及相关问题解决方法总结

一、虚拟内存swap(交换空间)简介

        物理内存读写数据比硬盘读写数据要快许多,由于内存是有限的,所以就引出了物理内存和虚拟内存。物理内存是系统硬件提供的内存,是真正的内存;虚拟内存是为了满足物理内存不足时而提出的策略,他是利用磁盘空间虚拟出的逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(swap space)。

        作为物理内存的扩展,linux会在物理内存不足时使用交换空间,内核会将暂时不用的内存块信息写到交换空间,这样物理内存就得到了释放,当需要用到原始信息时会重新从交换空间读入到物理内存中。

        交换空间通常是一个磁盘分区,但是也可以是一个文件。如果物理内存不足以支撑使用全部进程的话,使用swap也许会对有帮助,这样可以避免OOM,Linux内核OOM Killer机制将尝试通过杀进程的方式来自动释放内存。如果想让虚拟内存足够使用,可以开辟相应的磁盘空间作为交换空间,而启用交换的最大缺点是性能降低。所以,选择杀死进程还是启用交换(存在降低性能风险)需要根据实际情况来选择。

二、创建swap分区

1.查看swap分区

根据 free 命令查看swap是否有创建

2. 使用dd命令创建一个swap分区

dd if=/dev/zero of=/home/swap bs=1M count=2048

参数 含义
if if=文件名:输入文件名,默认为标准输入。即指定源文件
of of=文件名:输出文件名,默认为标准输出。即指定目的文件
bs 同时设置读入/输出的块大小为bytes个字节
count 仅拷贝blocks个块,块大小等于ibs指定的字节数

详细可参考 Linux dd 命令 | 菜鸟教程

3. 格式化分区文件

mkswap /home/swap

 4. swapon命令激活swap

 swapon /home/swap

 5. swapoff命令关闭swap

 swapoff /home/swap

6. 保存设置使其永久生效

进入/etc/fstab 添加下面这一行设置

/home/swap swap swap default 0 0

 fstab文件可用于定义磁盘分区,各种其他块设备或远程文件系统应如何装入文件系统。 当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

7. 查看设置是否成功

free -h

注: 系统中交换分区的大小并不直接取决于物理内存的大小,而是取决于系统中内存的负荷,需要根据具体的业务来设置具体的swap值。

三、设置swap分区相关问题

1.swap 重启后失效

在文件/etc/rc.local中增加开启swap的命令:

vi /etc/rc.local

增加下面内容:

swapon /data/swapfile

2.调整vm.swappiness的方法

        内核参数vm.swappiness控制换出运行时内存的相对权重,swappiness参数值可设置范围在0到100之间,参数取值对如何使用swap分区有很大联系。 此参数值越低,就会让Linux系统尽可能的少用swap分区,多用内存;参数值越高,则使内核更多的去使用swap空间。默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。swappiness=0的时候表示最大限度使用物理内存;swappiness=100时表示最大限度的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。具体取值可根据实际情况而定。

① 查看参数值:

cat /proc/sys/vm/swappiness

② 临时调整:

sysctl vm.swappiness = 30 

③ 永久调整:

vi /etc/sysctl.conf 
修改值:vm.swappiness=30

加载参数:sysctl -p

3.释放虚拟内存命令

        释放内存的时候,首先执行命令sync将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件inode、已延迟的块I/O以及读写映射文件,从而确保文件系统的完整性。

# sync命令可以多执行几遍

echo N > /proc/sys/vm/drop_caches

drop_caches的值(N)可以是0-3之间的数字,代表不同的含义:

0:不释放(系统默认值);默认情况下表示不释放内存,由操作系统自动管理;

1:释放页缓存;

2:释放dentries和inodes;

3:释放所有缓存。

物理内存和虚拟内存swap(交换空间)详解https://www.cnblogs.com/zhongwang/p/15994506.html

你可能感兴趣的:(运维,linux,linux,运维)