Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。Swap分区在系统的物理内存(这里应该是运行内存)不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
查看swap的使用情况
free 命令主要是用来査看内存和 swap 分区的使用情况的
输入命令
[root@VM_0_16_centos ~]# free -m
返回结果
total used free shared buff/cache available
Mem: 991 84 600 0 306 763
Swap: 0 0 0
[root@VM_0_16_centos ~]#
参数解析
参数 | 说明 |
---|---|
total | 总内存 |
used | 已使用内存 |
free | 空闲的内存 |
shared | 共享内存 |
buff/cache | 是指缓冲内存数/缓存内存数,单位是KB |
available | 实际可用的内存 |
共享内存(Shared)
在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存
缓冲(buffers)
磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。
缓存(cached)
把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
缓冲和缓存的区别
简单来讲,cached 是给读取数据时加速的,buffers 是给写入数据加速的。
cached是指把读取出来的数据保存在内存中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程;
buffers是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度后再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。
临时性的调整swap
一种简单粗暴的方法是设置swap空间为0。但是swap在系统崩溃的时候提供了安全机制,并且会尝试阻止系统因为内存溢出而杀掉进程。所以有些情况可能需要开启swap。这个时候我们需要调整vm.swappiness
来尝试降低内存交换的积极性
关闭swap
禁用swap
sudo swapoff -a
启用swap
sudo swapon -a
查看交换分区状态
sudo free -m
调整swappiness
swappiness接受0-100的参数。swappinessswappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间。
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
查询swappiness值
swappiness的默认值根据系统以及版本不同结果不一样(本人的腾讯云为30、阿里云为0)
[root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
30
设置swappiness值
用下面命令可以临时的把swappiness值修改为Elasticsearch文档要说明的1
[root@VM_0_16_centos ~]# sysctl vm.swappiness=1
vm.swappiness = 1
[root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
1
上面对swap的操作并非永久的,在服务器重启之后配置将被还原,假如需要永久性的修改其参数需要用下面的方式
永久性的设置swap
永久性禁用swap
修改/etc/fstab
文件
vim /etc/fstab
注释掉包含单词swap的所有行
调整swappiness
执行命令编辑sysctl.conf
文件
vim /etc/sysctl.conf
在此参数修改为你需要的数据
vm.swappiness = 10
注意此时查询的时候还是之前的配置
[root@VM_0_16_centos ~]# cat /proc/sys/vm/swappiness
1
需要重启服务或者是使用下面的命令使之生效
sysctl -p
个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。