关于linux内存free的一些事情
free绝对是Linux管理最常用,也最容易遭到误解的命令,现在我好像明白了一点,记下来先!
读懂free命令
$ free -m total used free shared buffers cached Mem: 64382 64086 296 11700 146 60730 -/+ buffers/cache: 3209 61173 Swap: 7811 598 7213
解释:
total:是总的物理内存
used:使用中的内存
free:完全空闲的内存
shared:多个进程共享的内存
buffers:写缓存,在写入磁盘之前,先把数据缓存一段时间,可以释放
cache:读缓存,读取过的文件,会缓存一段时间。可以释放
-buffers/cache:应用程序实际使用中的内存大小,等于used-buffers-cached
+buffers/cache:可供使用的内存总量,等于free+buffers+cached
Swap:不解释,都能看懂的
所以,可以供程序使用的内存,应该看+buffers/cache,而不是free,这是新手最容易犯的错误之一。那位可能要问了,明明已经开始使用swap了,怎么能说内存还充足呢?照我的理解是,系统在分配内存的时候,如果发现内存不足,会释放一批旧的cache,把空间腾出来给新申请的进程用,有时候释放不充分或者不及时,于是开始使用到swap了!
手动释放缓存
使用sync命令可以把buffer强制写入硬盘,有时候怕配置没有生效,会使用它强制写到硬盘。如果系统突然断电,buffer的数据没保存,是会丢失的!其实,大多数情况下,占用内存的都是cache,而不是buffer!
下面来说说怎么使用sysctl强制释放缓存,和内存释放相关的内核参数是vm.drop_caches,vm.drop_caches可以设置为0、1、2、3。
说明
0 采取措施之前的默认值
1 释放pagecache
2 释放dentries 和 inodes
3 释放pagecache、dentries和inodes
实际操作可以使用如下的sysctl,也可以使用echo 3 > /proc/sys/vm/drop_caches,效果一样!
$ sudo sysctl vm.drop_caches=3 vm.drop_caches = 3 $ free -m total used free shared buffers cached Mem: 64382 35144 29238 11696 1 32220 -/+ buffers/cache: 2923 61459 Swap: 7811 602 7209
释放之后,系统使用过程之中,cache和buffer又会慢慢变高!治标不治本呐!
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:昔我往矣 来源: 昔我往矣
- 标签: free
- 发布时间:2014-12-30 12:47:01
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则