zoukankan      html  css  js  c++  java
  • free-简单明了解释清楚怎么看内存使用

    free命令可以用来查看系统内存使用情况。我一般习惯-m参数以MB的方式查看

    [root@localhost ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:       1020288     947960      72328        312      82656     647740
    -/+ buffers/cache:     217564     802724
    Swap:      2097148     466656    1630492

    其他参数

    • -b  以Byte为单位显示内存使用情况。 
    • -k  以KB为单位显示内存使用情况。 
    • -m  以MB为单位显示内存使用情况。
    • -g   以GB为单位显示内存使用情况。 
    • -o  不显示缓冲区调节列。 
    • -s<间隔秒数>  持续观察内存使用状况。 
    • -t  显示内存总和列。 
    • -V  显示版本信息。

    解释:

    •    total:是总的物理内存
    •    used:使用中的内存
    •    free:完全空闲的内存
    •    shared:多个进程共享的内存 
    •    buffers:写缓存,在写入磁盘之前,先把数据缓存一段时间,可以释放
    •    cache:读缓存,读取过的文件,会缓存一段时间。可以释放
    •    -buffers/cache:应用程序实际使用中的内存大小,等于used-buffers-cached(Mem列的三个数)
    •    +buffers/cache:可供使用的内存总量,等于free+buffers+cached(Mem列的三个数)
    •    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,效果一样!

    [root@localhost ~]# sysctl vm.drop_caches=3
    vm.drop_caches = 3
    [root@localhost ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:           996         88        907          0          0         12
    -/+ buffers/cache:         75        920
    Swap:         2047        455       1592

    不过这个还是会慢慢涨起来的!

     

    参考:http://blogread.cn/it/article/7195?f=wb

  • 相关阅读:
    程序的链接
    Graphviz 画图的一些总结
    C表达式中的汇编指令
    epoll(2) 源码分析
    epoll(2) 使用及源码分析的引子
    eventfd(2) 结合 select(2) 源码分析
    poll(2) 源码分析
    select 源码分析
    kfifo
    程序的机器级表示:寻址方式、指令及栈的运行机制
  • 原文地址:https://www.cnblogs.com/leezhxing/p/5404329.html
Copyright © 2011-2022 走看看