Linux内存释放机制

转载 2012年03月30日 11:17:48

 linux的free命令中,cached和buffers的区别

Free
  free 命令相对于top 提供了更简洁的查看系统内存使用情况:
  $ free
  total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000
  Mem:表示物理内存统计
  -/+ buffers/cached:表示物理内存的缓存统计
  Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
  系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
  我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
  total1:表示物理内存总量。
  used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
  free1:未被分配的内存。
  shared1:共享内存,一般系统不会用到,这里也不讨论。
  buffers1:系统分配但未被使用的buffers 数量。
  cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
  used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
  free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
  可以整理出如下等式:
  total1 = used1 + free1total1 = used2 + free2used1 = buffers1 + cached1 + used2free2 = buffers1 + cached1 + free1
  buffer 与cache 的区别
  A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.
  更详细的解释参考:Difference Between Buffer and Cache
  对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣,请参考:What is Shared Memory?
  cache 和 buffer的区别:
  Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。
  Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
  Free中的buffer和cache:(它们都是占用内存):
  buffer : 作为buffer cache的内存,是块设备的读写缓冲区
  cache: 作为page cache的内存, 文件系统的cache
  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小
 
内存释放机制

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:

cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0

sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

 echo 3 > /proc/sys/vm/drop_caches
cat /proc/sys/vm/drop_caches
3

将/proc/sys/vm/drop_caches值设为3

请查看图片,已经将内存释放。
 

  可以看出内存已释放完毕。

linux 内存清理/释放命令

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。...
  • moshenglv
  • moshenglv
  • 2016年10月11日 15:43
  • 9161

如何手动释放Linux内存的方法

当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题...
  • shinaiqing
  • shinaiqing
  • 2017年04月11日 20:22
  • 938

linux删除文件后没有释放内存的问题

今天看到测试环境忽然不能访问了,提示缓存文件不能
  • xiaoai5324
  • xiaoai5324
  • 2014年09月03日 15:26
  • 811

linux的top下释放缓存!!!!!!

 细心的朋友会注意到,当你在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解...
  • liuyundemhsg
  • liuyundemhsg
  • 2016年10月14日 16:29
  • 476

linux下释放cache内存

linux下释放cache内存细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过...
  • yysdsyl
  • yysdsyl
  • 2008年05月17日 00:02
  • 21733

对Linux堆内存释放的总结

http://bbs.chinaunix.net/thread-2195511-1-1.html Linux用户进程是如何释放内存的 Linux进程使用内存的基本流程:   从图中我们可以看出,进程的...
  • haichunzhao
  • haichunzhao
  • 2014年03月04日 17:03
  • 1949

LINUX下删除文件磁盘空间不释放的原因

这几天做LINUX实验的时候,发觉自己删除了一个大文件后用  df -h 指令
  • mr253727942
  • mr253727942
  • 2014年08月03日 22:26
  • 3701

Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案

问题描述 Linux内存使用量超过阈值,使得Java应用程序无可用内存,最终导致程序崩溃。即使在程序没有挂掉时把程序停掉,系统内存也不会被释放。 找原因的过程 这个问题已经困扰我好几个月...
  • u014740338
  • u014740338
  • 2017年03月27日 20:48
  • 4165

对Linux堆内存释放的总结

Linux用户进程是如何释放内存的 Linux进程使用内存的基本流程:     见图1 从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆...
  • u013265795
  • u013265795
  • 2015年08月24日 15:19
  • 488

linux内存清理和swap内存释放办法

如果swap空间使用到30%以上,系统就变得很慢,如果物理内存够,就需要清理下。 原文:http://wushank.blog.51cto.com/3489095/1255906 ...
  • longxj04
  • longxj04
  • 2014年01月10日 16:56
  • 19176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux内存释放机制
举报原因:
原因补充:

(最多只允许输入30个字)