zoukankan      html  css  js  c++  java
  • 【转】Linux 查看内存(free buffer cache)

    转自:http://elf8848.iteye.com/blog/1995638

    Linux下如何查内存信息,如内存总量、已使用量、可使用量。
    经常使用Windows操作系统的朋友,已经习惯了如果空闲的内存较多,心里比较踏实。
    当使用Linux时,可能觉的Linux物理内存很快被用光(如频繁存取文件后),当程序结束后内存没有被释放。空闲内存少的可怜,心里总不踏实。
    Linux操作系统的内存管理方式与Windows不同,Linxu会尽量多的利用内存,让尽可能多的内存参与工作(做cache)以提高性能。
    所以你看到的空闲内存总是很小,当你的程序需要更多内存时,Linxu系统会把做cache的内存还给你,让你来运行你的程序。

    图1

    free -m :查看内存情况,单位为MB。
    total 内存总数
    used 已经使用的内存数(我的程序使用内存数量+系统缓存使用的内数量)
    free 空闲的物理内存数(是真正的空闲,未被任何程序占用)
    shared 多个进程共享的内存总额
    buffers 磁盘缓存(Buffer Cache)的大小(可提高系统I/O调用的性能)
    cached  磁盘缓存(Page Cache)的大小(可提高系统I/O调用的性能)
    -buffers/cache 表示已被我们的程序使用的内存数,计算方法:used - buffers - cached
    +buffers/cache 表示还可已被我使用的内存数,计算方法:free + buffers + cached

    操作系统目前可用内存总量=free + buffers + cached,上图是1155M

    buffers是用来给块设备做的缓冲大小、buffers是用来存储目录里面有什么内容,权限等等
    cached用来给文件做缓冲,用来记忆我们打开的文件.


    即使你的程序运行结束后,Cache Memory也不会自动释放。
    这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存(free)会很少。
    其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。
    如果你希望手动去释放Cache Memory也是有办法的。

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

    cat /proc/sys/vm/drop_caches   查看默认值

    先手动执行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

    再来运行free命令。可以看出来有效的释放了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 first



    通过Windows任务管理器查看内存--Win2008/Win7
    ---------------------------------------------------------------------------
    通过任务管理器有“性能”选项卡,可查看“物理内存使用率”。
    可直接查看物理内存使用率的百分比。
    由于物理内存不够时,会把当前不活动程序挤到“虚拟内存”上,让出物理内存给当前程序使用,
    所以一直都无法看到物理内存使用率达到100%,只会看到“页面文件(图中叫‘提交’)”的量在一直增长。
    图2



    正方型红框内:已使用的物理内存(不含虚拟内存)
    物理内存--总数:物理内存总量
    物理内存--已缓存:操作系统的“磁盘缓存”占用的内存
    物理内存--可用:你还可以使用的内存,是(空闲+已缓存),是不是和Linux很像
    物理内存--空闲:真正空闲的物理内存

    系统--提交:页面文件使用率,页面文件(PF)总量=物理内存+虚拟内存


    通过Windows任务管理器查看内存--Win2003/Win Xp
    ---------------------------------------------------------------------------
    通过任务管理器有“性能”选项卡,可查看“页面文件使用率(PF)”。
    无法直接查看内存使用量的百分比,查看不如win 7方便。
    页面文件(PF)总量=物理内存+虚拟内存

    图3

  • 相关阅读:
    npm 出现npm ERR! ERESOLVE unable to resolve dependency tree的错误
    Linux基础06 软链接, 硬链接, 查看磁盘状态df, 文件编辑vim(视图模式[批量注释]), 对比文件, 特殊符号, 显示ip地址命令ip, ifconfig, hostname, sed替换命令, awk取列命令
    Linux基础08 组的基本管理, 组的增删改, shell的分类, 环境变量的加载顺序, 登录显示动画, 切换用户su , 用户提权sudo, sudo企业案例
    Linux基础07 用户管理, 用户相关命令(创建, 修改, 删除), 用户创建配置文件, 命令提示符问题, 查看用户登录, 设置用户密码(设置随机复杂密码)
    在Linux上安装Python3
    WRI$_ADV_OBJECTS表过大,导致sysaux表空间不足
    优化器统计跟踪(SYS.EXP_HEAD$ SYS.EXP_OBJ$ SYS.EXP_STAT$不)导致表空间 SYSAUX不断增长
    使用 yapitotypescript 生成接口响应数据的 TS 类型声明
    git 忽略文件提交的几种姿势
    android项目和model存在同一个类调用时解决方法 L
  • 原文地址:https://www.cnblogs.com/hark0623/p/6089225.html
Copyright © 2011-2022 走看看