Linux内存运维

swap交换分区
swap 是 linux 系统磁盘管理的一块特殊的分区,当实际的物理内存不足的时候,操作系统会从整个内存中,取出一部分暂时没在使用的内存,拿出来放到交换分区,从而提供给当前正在使用的程序,可以使用更多的内存。
使用 swap 分区的作用是,通过操作系统的调取,程序可以用到的实际内存,会远大于物理内存。
swap 分区大小,必须根据物理内存和硬盘容量来计算
-当你的物理内存小于 1G,必须使用 swap 提升内存使用量
-内存使用过多的应用程序,比如图像,视频等,必须用 swap 分区防止物理内存不足,造成软件崩溃。
-当你的电脑休眠,内存中的数据会放入 swap 交换分区中,当你的电脑恢复后,再从 swap 中读取数据,恢复软件正常工作
创建 swap 分区
centos7 系统,计算 swap 分区如下:
-内存小于2G, swap 分配和内存同样大小的空间
-内存大于2G, swap 也就分配2G空间
buffers 和 cached解析
buffers 缓冲区 buffers 是给写入数据加速使用的
cached 缓存 cached 是用于读取数据时,加速使用的。
cached 表示把数据从磁盘上读取出来,保存在内存中,再次读取的时候,不再去硬盘上拉取数据,直接从内存中读取,加速查找。
buffers 表示在写入磁盘数据的时候,把分散的操作临时保存到内存中,达到一定的数量之后,集中写入到磁盘,减少磁盘碎片,加速数据查找,减少磁头的反复的寻道时间。
buff 和 cache 的作用总结
-buffers 和 cached 都是基于内存的存储中间层
cached 解决的时间问题,加速读取的过程
buffers 解决空间存储问题,给数据一个临时存放的区域。
cached 利用内存的高速读写特性,
buffers 利用了内存的存储空间特性。
我的内存被吃了,无辜提示内存不足了怎么办,但是在 cache,buff 中又看到大量的内存,如何释放
0 – 不释放1 – 释放页缓存2 – 释放dentries和inodes3 – 释放所有缓存
1. 释放cache 的命令
echo 1 > /proc/sys/vm/drop_caches 也可以用 sysctl -w vm.drop_caches=1 命令
命令解释:
"echo 1" 是释放 buff 的一个命令参数,把 "1"写入到 /proc/sys/vm/drop_caches 文件中, "1" 代表为真,让删除缓存生效。
2.清除目录缓存和 inodes 命令
echo 2 > /proc/sys/vm/drop_caches 也可以用 sysctl -w vm.drop_caches=2 命令
3. 清除内存页的缓存
echo 3 > /proc/sys/vm/drop_caches 也可以用 sysctl -w vm.drop_caches=3 命令
以上三种方式都是临时释放缓存的命令,
要永久生效 vim /etc/sysctl.conf 将要清除的命令写入到这个文件中
除了以上3个命令,还可以清理文件系统缓存,使用 sync 命令,可以用于清理僵尸进程(就是主进程挂了,剩下的子进程就群龙无首,变僵尸进程了)
sync 的作用:将内存缓冲区的数据,写入到磁盘中
关闭swap
前提:首先要保证内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap。
a.查看当前swap分区挂载在哪?swapon -s
b.关停这个分区 swapoff /dev/dm-1
c.查看状态:swapon -s
d.查看swap分区是否关停,最下面一行显示全:swapon -s
e.将swap挂载到/dev/sda5上:swapon /dev/dm-1
f.查看挂载是否成功:free -m
【总结1】
1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory
2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区
3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区
4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级
【总结2】
其实swap是可以关闭的(比如swapon,swapoff命令),有些时候为了追求高性能会这么做,通常为了性能设置在10-30之间比较多。
通常使Swap负载保持在30%以下,这样才能保证系统的良好性能,这是一个参考值。
swap可以是磁盘划分的分区,因此有人叫做交换分区;也可以是某个文件,有方法教如何扩展swap空间。
swap可以设置多个的。
Linux系统的内存管理必须使用交换区来建立虚拟内存(是不是必须有时间测),安装好系统后可以把它关闭掉的。
交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的,此时考虑扩展物理内存,或排查什么程序如此占用内存了;或者服务器很久没有重启,过swap占用过大。
linux下的swap分区触发是由参数控制的,swappiness参数将控制在剩余多少物理内存的时候使用虚拟内存,当然,虚拟内存是在迫不得已的情况就才使用的,否则会
大大降低系统性能。
centos7结果通常是30,30的意思表示在物理内存已经使用了70%的时候(也就是100-30),剩余30%没使用,会开始使用swap虚拟内存。
(个人记忆:swappiness=30表示物理内存只有最后30%可用了,就开始使用swap)。
# cat /proc/sys/vm/swappiness
30
#如何设置合理的swap交换触发点。
#swappiness的值的大小对如何使用swap分区是有着很大的联系的。
swappiness=0 的时候表示最大限度使用物理内存,然后才是swap空间。在配置k8s或者其它一些追求高性能的情况,你可能看到关闭swap的分区。
swappiness=100 的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
swappiness 这个值应该低一点,系统的性能就比较好,通常为了性能设置在10-30之间比较多。
方式一:临时
sysctl vm.swappiness=10
这种方式是临时修改,重启后将自动还原。
执行下面的命令,使立即生效:
sysctl -p
方式二(永久):
编辑文件 /etc/sysctl.conf,在最下面添加:
kernel.shmall = 4294967296
vm.swappiness=10

浙公网安备 33010602011771号