IT技术博客大学习 共学习 共进步

关于linux内存free的一些事情

昔我往矣 2014-12-30 12:47:01 累计浏览 12,741 次
本机暂存

   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又会慢慢变高!治标不治本呐! 

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,202)
  2. 我的 RHCA 之路 (累计阅读 13,923)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,041)
  4. 给程序员新手的一些建议 (累计阅读 13,022)
  5. Linux 性能监控、测试、优化工具 (累计阅读 12,942)
  6. ps - 按进程消耗内存多少排序 (累计阅读 12,601)
  7. Google怎么用linux (累计阅读 12,460)
  8. find命令的一点注意事项 (累计阅读 11,781)
  9. Linux Used内存到底哪里去了? (累计阅读 11,740)
  10. Linux命令行里的“瑞士军刀” (累计阅读 11,521)