linux下内存释放问题

细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.
先来说说free命令
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        163         86          0         10         94
-/+ buffers/cache:         58        191
Swap:          511          0        511
其中:
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached
可用的memory=free memory+buffers+cached
有了这个基础后,可以得知,我现在used为163MB,free为86,buffer和cached分别为10,94
那么我们来看看,如果我执行复制文件,内存会发生什么变化.
[root@server ~]# cp -r /etc ~/test/
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        244          4          0          8        174
-/+ buffers/cache:         62        187
Swap:          511          0        511
在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"
那么有人说过段时间,linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放>?
[root@server test]# free -m
             total       used       free     shared    buffers     cached
Mem:           249        244          5          0          8        174
-/+ buffers/cache:         61        188
Swap:          511          0        511
MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:
[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默认为0
[root@server test]# sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3
将/proc/sys/vm/drop_caches值设为3
[root@server test]# free -m
             total       used       free     shared    buffers     cached
Mem:           249         66        182          0          0         11
-/+ buffers/cache:         55        194
Swap:          511          0        511
再来运行free命令,发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.
有关/proc/sys/vm/drop_caches的用法在下面进行了说明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
              Writing  to  this  file  causes the kernel to drop clean caches,
              dentries and inodes from memory, causing that memory  to  become
              free.
To  free  pagecache,  use  echo 1 > /proc/sys/vm/drop_caches; to
              free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
              to   free   pagecache,   dentries  and  inodes,  use  echo  3  >
              /proc/sys/vm/drop_caches.
Because this is a non-destructive operation  and  dirty  objects
              are not freeable, the user should run sync(8) first.
 

转载于:https://blog.51cto.com/jxwpx/212235

linux下内存释放问题相关推荐

  1. Linux下内存检测工具:asan

    Linux下内存检测工具:asan ASAN(Address-Sanitizier)早先是LLVM中的特性,后被加入GCC 4.8,在GCC 4.9后加入对ARM平台的支持.因此GCC 4.8以上版本 ...

  2. eclipse内存设置Linux,Eclipse CDT Linux下内存分析 补记

    常用工具汇总 常用的内存分析工具 PurifyPlus 不支持常用的Linux 64系统[Ubuntu redhat],悲剧 Valgrind简介 Memcheck Memcheck 工具主要检查下面 ...

  3. linux查看设备内存代码,Linux下内存查看命令(示例代码)

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  4. Linux下内存问题检测神器 valgrind

    Linux下内存问题检测神器:Valgrind - Madcola - 博客园 (cnblogs.com)

  5. Linux下内存使用率、CPU使用率、以及运行原理-转

    Linux下内存使用率.CPU使用率.以及运行原理 Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg 显示开机信息.kernel会将开机信息存储在ring buffer中.您若是开机时来 ...

  6. Linux下内存泄漏定位方法

    Linux下内存泄漏可分为用户空间的内存泄漏和内核空间的内存泄漏. 用户空间内存泄漏的查找方法: 第一步,查找内存泄漏的应用程序. 首先,写一个简单的内存泄漏程序(每秒钟泄漏4MB)umemleak. ...

  7. linux下内存性能测试工具STREAM

    Linux下内存性能测试 简介 下载并解压 编译 运行 运行结果 结果分析 简介 Stream测试是内存测试中业界公认的内存带宽性能测试基准工具,stream由Virginia University提 ...

  8. Linux下如何释放内存

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

  9. linux swap分区满了,Linux下如何释放内存、swap分区满了怎么办!

    Name: 北京--东东 LINUX系统运维技术交流群:4930609 Email:tajiandong@163.com 在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好.但 ...

  10. Linux下内存泄露工具

    概述 内存泄露(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,这时就出现了内存泄露.尽管优秀的编程实践可以确保最少的泄露,但是根据经验, ...

最新文章

  1. Python3基础笔记---面向对象
  2. 图像编程魔法门(By C#) 目录
  3. python简单代码input-【python系统学习05】input函数——实现人机交互
  4. reactor官方文档译文(2)Reactor-core模块
  5. python科学计算笔记(三)pandas中Series和DataFrame练习
  6. c语言程序输出时有没有分号,问什么C程序里总是提示缺少分号;,而明明有分号?...
  7. 鲲鹏迁移第一批吃螃蟹的人,践行技术国际化
  8. Echarts图的属性大全,学会绝对可以把Echarts吃的透透的
  9. excel制作窗体查询界面_利用 VBA窗体制作excel登录界面
  10. 【Unity】第5章 3D坐标系和天空盒
  11. Confluence 6 升级自定义的站点和空间布局
  12. 将GridView数据导出到Excel实现
  13. UG中许多人会忽略的一些常用鼠标右键设置方法
  14. 这几天的QC培训想到的
  15. omron欧姆龙NJ/NX程序 欧姆龙NJ501-1300,欧姆龙NB系列触摸屏
  16. oracle现金流量表逻辑,分析现金流量表填列法的逻辑
  17. WordPiece 和 BPE 的区别
  18. QTTabBar Windows资源管理器增强插件
  19. 软件测试最容易陷入的28个误区
  20. JavaCV - 图像锐化

热门文章

  1. 镜像资源的使用:100倍速度提升不是梦!
  2. 专访Virtu创始人Doug Cifu:找到你做得最好的那件事,反复做!
  3. gunicorn: No module named 'fcntl'
  4. 自动化运维落实到位的三点基础及常用工具对比
  5. 机器学习 --- 4. 大内密探HMM(隐马尔可夫)围捕赌场老千(转)
  6. 【图像处理基础】基于matlab GUI图像处理(反色+亮度+二值化+空间肤色检测)【含Matlab源码 1008期】
  7. 【语音识别】基于matlab功率谱和倍频法男女生识别【含Matlab源码 705期】
  8. 【图像去噪】基于matlab小波变换+Contourlet变换+PCA图像去噪【含Matlab源码 610期】
  9. js tree选中子集默认选中上级_原生js实现轮播图(两种方法)
  10. 颜色 透明度 算法_通过问责制和透明度减少算法偏差