一、虚拟内存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