Linux 清除内存中的cache
首先以Centos6.4的来说,Centos7有些区别
一、buffer/cache/swap的介绍
#cat /etc/redhat-release #查看系统版本
CentOS release 6.4 (Final)
#free -m #查看缓冲区及内存使用情况
total used free shared buffers cached
Mem: 7814 7681 132 0 23 5727
-/+ buffers/cache: 1930 5884
Swap: 8191 32 8159
先看第二行Mem行:
Mem: 7814 7681 132 0 23 5727 #内存总大小为7814MB,使用7681MB,空闲132MB,共享内存0M,buffers:23MB,cached:5727MB
然后看地三行-/+ buffers/cache行:
-/+ buffers/cache: 1930 5884 #(-buffers/cache) used内存数:1930MB(指的第一部分Mem行中的used – buffers – cached),(+buffers/cache) free内存数:5884MB(指的第一部分Mem行中的free + buffers + cached),也就是说-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.
然后看第四列Swap行:
Swap: 8191 32 8159 #这也就是我们经常说的虚拟内存,8192为swap分区的总大小为8192MB,32为swap分区的使用为32MB,8159为swap空闲为8159MB。
swap分区的作用:
Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。所以swap分区不被占用或者占用很少,说明现在系统内存够用,运行还算良好,不会影响系统运行。
首先,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个Swap交换分区可以用作临时存放使用率不高的内存分页,把腾出的内存交给急需的应用程序(进程)使用。有点类似机房的UPS系统,虽然正常情况下不需要使用,但是异常情况下, Swap交换分区还是会发挥其关键作用。
其次,即使你的服务器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),Swap交换分区更是重要,因为谁也不想看到由于物理内存不足导致系统崩溃。
最后,现在很多个人用户在使用Linux,有些甚至是PC的虚拟机上跑Linux系统,此时可能常用到休眠(Hibernate),这种情况下也是推荐划分Swap交换分区的。
其实少量使用Swap交换空间是不会影响性能,只有当RAM资源出现瓶颈或者内存泄露,进程异常时导致频繁、大量使用交换分区才会导致严重性能问题。另外使用Swap交换分区频繁,还会引起kswapd0进程(虚拟内存管理中, 负责换页的)耗用大量CPU资源,导致CPU飙升。
空闲内存/已用内存换算(也可参考-/+ buffers/cache这行信息也是内存正确使用率):
空闲内存=free(132)+buffers(23)+cached(5727)=5882
已用内存=total(7814)-空闲内存(5882)=1932
buffers和cache的区别: