Linux禁用内存交换

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

个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。

你可能感兴趣的:(工作积累,Linux,内存交换,swap)