以前我对这块认识很模糊,而且还有错误的认识;今天由我同事提醒,所以我决定来好好的缕缕这块的关系。

图:


-------------------------------------------1.参数含义-----------------------------------------------------------------------
Mem:表示物理内存统计
   total: 表示系统总物理内存5993156kb(约5852M)
   used: 表示总计分配给缓存(包含buffers 与cached),但其中可能部分缓存未实际使用
   free:表示未分配的内存
   shared: 表示共享内存
   buffers:表示系统分配但未被使用的buffers数量
   cached:表示系统分配但未被使用的cache的数量

在Free命令中显示的buffer和cache,它们都是占用内存:
buffer :   作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。
cached:  作为page cache的内存, 文件系统的cache,是memory的缓冲区 。
如果cached 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小 。

-/+ buffers/cached:   表示物理内存的缓存统计
   used: 表示实际使用的buffers与cache的总量,这就是实际使用的内存总量
   free:  表示未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可能内存(所以一般linux机器看可用内存就看此值)

Swap:   表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

-------------------------------------------2.常用概念-----------------------------------------------------------------------
物理内存总大小 :
mem.total=mem.used+mem.free
mem.total=(-/+ buffers/cached).used+(-/+ buffers/cached).free

已经分配的内存大小:
mem.used=mem.buffers+mem.cached+(-/+ buffers/cached).used

实际可用内存大小:
(-/+ buffers/cached).free=mem.free+mem.buffers+mem.cached

-------------------------------------------3.手工清除缓存------------------------------------------------------------------
# sync
# echo 1 > /proc/sys/vm/drop_caches
  echo 2 > /proc/sys/vm/drop_caches
  echo 3 > /proc/sys/vm/drop_caches

cache释放:
a.To free pagecache:
echo 1 > /proc/sys/vm/drop_caches

b.To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches

c.To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

说明,释放前最好sync一下,防止丢数据。

-------------------------------------------4.常见疑惑-----------------------------------------------------------------------
1.用户常见的疑问是,为什么free这么小,是否关闭应用后内存没有释放?
   但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/+ buffers/cache: 2592892Kb,这才是系统可用的内存大小。

2.free内存还有200M,cache里有58G,然后程序就跪了,抛了个tcmalloc allocation failed 65536, out of memory(needed 65312 bytes). 需要内存时为什么cache里面的没能释放?
   cache 中有程序在占用就无法释放了。

3.有时候free太小,cached特别大时启动mysql会报错,这个是什么原因?
    这说明内存确实不够,cached并不是全部可以释放的,有程序占用就不能释放了

4.我的Linux上cache占满RAM时系统非常慢,系统也不自动释放cache。所以号称“cache对性能只有好处而没坏处”是假的!
   这个要看你实际是使用的应用是什么。cache能带来的好处是,减轻频繁读写硬盘的需要,也就是降低IO,这特别是对于服务器上的应用来说是很常见的。相反,如果cache需要频繁更新,那会出现您提到的问题了

Linux-Memory小记的更多相关文章

  1. linux memory release commands内存清理/释放命令

    linux 内存清理/释放命令 You could find reference from here: http://jingyan.baidu.com/article/597a06436a687f3 ...

  2. 如何展开Linux Memory Management学习?

    Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的. 关于Linux内存管理,在开始之前做些准备工作. 首先bing到了Quora的<How can one rea ...

  3. 查看 Linux memory 内存占用

    linux 系统内存: 如果系统内存使用过高 就会产生 out of memory exception 现象: 通常 在mongo 默认服务运行资源是不受限制的.也会占用而同一系统运行的其他服务: 当 ...

  4. linux memory dump--http://www.forensicswiki.org/wiki/Tools:Memory_Imaging

    Linux provides two virtual devices for this purpose, '/dev/mem' and '/dev/kmem', though many distrib ...

  5. linux 守护程序小记(指定进程不存在则启动 )

    最近想在debian 下做个守护进程.用于守护指定的程序一直处于运行状态.网上查了下,有Crontab方式和写脚本执行方式. Crontab Crontab 是系统自带的,类似于Windows的计划任 ...

  6. Linux 命令小记

    1. pidof 进程名 :获取进程的pid,例如 pidof memcached 得到5333 2. unset Shell变量 :取消设置一个shell变量,从内存和shell的导出环境中删除它, ...

  7. 移动硬盘安装linux系统小记

    由于某种原因,笔记本电脑不在身边,因教学需要必须进行电脑展示教学,所以就有了如下的做法,写下来也是为以后方便吧.-- 目前手头有移动硬盘,怎么样才能实现用移动硬盘进行教学呢?!!! 机房若干台机器都是 ...

  8. linux下小记

    今天碰到一个问题 记录下 /usr/bin/ld: cannot find ld 和ldconfig的区别 使用makefile编译的时候提示ld提示某个so找不到 当时使用ldconfig查了下 发 ...

  9. Linux学习小记(1)

    学习Linux,进行阶段性总结,权当笔记方便日后翻阅和查看. 在此特别推荐peida的博客,他的有关Linux的理解个人感觉深入浅出,很适合入门的小白来理解和学习. 说一说针对IP的修改,ifconf ...

  10. 常用Linux源小记

    常用国内镜像站: 阿里云:http://mirrors.aliyun.com/ 中科大:http://mirrors.ustc.edu.cn/ 清华:https://mirrors.tuna.tsin ...

随机推荐

  1. 浅谈 Web 中前后端模板引擎的使用

    前言 这篇文章本来不打算写的,实话说楼主对前端模板的认识还处在非常初级的阶段,但是为了整个 源码解读系列 的完整性,在深入 Underscore _.template 方法源码后,觉得还是有必要记下此 ...

  2. Not Hello World

    通常对于一门语言的学习,一般都是以"Hello,World!"开始的.但对于汇编语言的学习,输出这句话并不容易,首先得了解寄存器等硬件知识. 汇编语言要得以运行,首先要讲源文件编译 ...

  3. string常用函数

    1.addslashes($str); //转义时str中的所有特殊字符 stripslashes($str) //还原 2.bin2hex($str); //将2进制转成16进制 3. echo c ...

  4. Android 轮换页面+TabHost 实例

    最终效果展示: 首先我们需要一个ViewPager控件,不过可以发现在左侧的控件列表中并没有这个控件 这时我们要去升级包中查看 然后在厘米找到 ViewPager.class 这时我们双击这个发现不能 ...

  5. Oracle视图时间戳转为Date

    CREATE OR REPLACE VIEW PDAORDER AS SELECT po.id id, po.order_no AS order_no, po.money AS money, (SEL ...

  6. iOS 开发总结(上)

    来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...

  7. 让 FreeBSD 和 Gentoo Linux 在 ZFS 存储卷上共存

    自我回归到 Librem 15 已经有段时间了.我一般会选择 FreeBSD 来处理所有的事情,但有时会要访问一个运行在 Librem 平台上的 Linux OS,以便用它来帮助我对一些遗留的设备驱动 ...

  8. Network Basic Commands Summary

    Network Basic Commands Summary set or modify hostname a)     temporary ways hostname NEW_HOSTNAME, b ...

  9. wpf 遍历控件及其值

    /// <summary> /// 遍历控件及其值 /// </summary> /// <param name="uiControls">界面 ...

  10. QT下调试基于ros的catkin项目

    1.首先告诉qt ros的搜索路径,通过修改qt creator 桌面启动程序来实现 sudo    gedit ~/.local/share/applications/DigiaQtOpenSour ...