Linux 如何手动释放Swap、Buffer和Cache

做者:Darren_Wen
连接:https://blog.51cto.com/wendas...
本文介绍linux内存机制、虚拟内存swap、buffer/cache释放等原理及实操。

1、什么是linux的内存机制?

咱们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,所以,咱们但愿全部数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。node

物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了知足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用做虚拟内存的磁盘空间被称为交换空间(Swap Space)。linux

做为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存获得了释放,这块内存就能够用于其它目的,当须要用到原始的内容时,这些信息会被从新从交换空间读入物理内存。web

Linux的内存管理采起的是分页存取机制,为了保证物理内存能获得充分的利用,内核会在适当的时候将物理内存中不常用的数据块自动交换到虚拟内存中,而将常用的信息保留到物理内存。算法

要深刻了解linux内存运行机制,须要知道下面提到的几个方面:vim

Linux系统会不时的进行页面交换操做,以保持尽量多的空闲物理内存,即便并无什么事情须要内存,Linux也会交换出暂时不用的内存页面。这能够避免等待交换所需的时间。缓存

Linux 进行页面交换是有条件的,不是全部页面在不用时都交换到虚拟内存,linux内核根据”最近最常用“算法,仅仅将一些不常用的页面文件交换到虚拟 内存,有时咱们会看到这么一个现象:linux物理内存还有不少,可是交换空间也使用了不少。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需 要耗费不少内存资源,此时就会有一些不经常使用页面文件被交换到虚拟内存中,但后来这个占用不少内存资源的进程结束并释放了不少内存时,刚才被交换出去的页面 文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲不少,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不 用担忧什么,只要知道是怎么一回事就能够了。网络

交换空间的页面在使用时会首先被交换到物理内存,若是此时没有足够的物理内存来容纳这些页 面,它们又会被立刻交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会致使linux出现假死机、服务异常等问题,linux虽 然能够在一段时间内自行恢复,可是恢复后的系统已经基本不可用了。app

所以,合理规划和设计Linux内存的使用,是很是重要的.性能

在Linux 操做系统中,当应用程序须要读取文件中的数据时,操做系统先分配一些内存,将数据从磁盘读入到这些内存中,而后再将数据分发给应用程序;当须要往文件中写 数据时,操做系统先分配内存接收用户数据,而后再将数据从内存写到磁盘上。然而,若是有大量数据须要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得很是低下,由于不管是从磁盘读数据,仍是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种状况下,Linux引入了buffers和 cached机制。spa

buffers与cached都是内存操做,用来保存系统曾经打开过的文件以及文件属性信息,这样当操做系统须要读取某些文件时,会首先在buffers 与cached内存区查找,若是找到,直接读出传送给应用程序,若是没有找到须要数据,才从磁盘读取,这就是操做系统的缓存机制,经过缓存,大大提升了操 做系统的性能。但buffers与cached缓冲的内容倒是不一样的。

buffers是用来缓冲块设备作的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件作缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆咱们打开过的文件和程序。

为了验证咱们的结论是否正确,能够经过vi打开一个很是大的文件,看看cached的变化,而后再次vi这个文件,感受一下两次打开的速度有何异同,是否是第二次打开的速度明显快于第一次呢?接着执行下面的命令:

find / -name .conf看看buffers的值是否变化,而后重复执行find命令,看看两次显示速度有何不一样。

2、linux何时开始使用虚拟内存(swap)?

[root@wenwen ~]# cat /proc/sys/vm/swappiness60

上面这个60表明物理内存在使用40%的时候才会使用swap(参考网络资料:当剩余物理内存低于40%(40=100-60)时,开始使用交换空间)swappiness=0的时候表示最大限度使用物理内存,而后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,而且把内存上的数据及时的搬运到swap空间里面。

值越大表示越倾向于使用swap。能够设为0,这样作并不会禁止对swap的使用,只是最大限度地下降了使用swap的可能性。

一般状况下:swap分区设置建议是内存的两倍 (内存小于等于4G时),若是内存大于4G,swap只要比内存大就行。另外尽可能的将swappiness调低,这样系统的性能会更好。

B.修改swappiness参数

#临时性修改:[root@wenwen ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@wenwen ~]# cat /proc/sys/vm/swappiness
10

#永久性修改:
[root@wenwen ~]# vim /etc/sysctl.conf
加入参数:vm.swappiness = 35
而后在直接:
[root@wenwen ~]# sysctl -p /etc/sysctl.conf

#查看是否生效:cat /proc/sys/vm/swappiness35

当即生效,重启也能够生效。

3、怎么释放内存?

通常系统是不会自动释放内存的关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值能够为0~3之间的任意数字,表明着不一样的含义:

  • 0 – 不释放
  • 1 – 释放页缓存
  • 2 – 释放dentries和inodes
  • 3 – 释放全部缓存

实操:

很明显多出来不少空闲的内存了吧

4、怎么释放swap?

前提:首先要保证内存剩余要大于等于swap使用量,不然会宕机!根据内存机制,swap分区一旦释放,全部存放在swap分区的文件都会转存到物理内存上。一般经过从新挂载swap分区完成释放swap。

a.查看当前swap分区挂载在哪?b.关停这个分区c.查看状态:d.查看swap分区是否关停,最下面一行显示全e.将swap挂载到/dev/sda5上f.查看挂载是否成功

image

相关文章
相关标签/搜索