zoukankan      html  css  js  c++  java
  • free

    内存使用说明

    free 命令相对于top 提供了更简洁的查看系统内存使用情况

    [root@localhost ~]# free
                 total       used       free     shared    buffers     cached
    Mem:       2942008    1905080    1036928          0     152192     341212
    -/+ buffers/cache:    1411676    1530332
    Swap:      4095992      94236    4001756
    
    注:这里显示的单位是kb
    

      

    Linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。有关linux内存机制参考:

    Linux 内存机制

    Mem:表示物理内存统计。
    -/+ buffers/cached:表示物理内存的缓存统计
    Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。

    Mem 行(第一行)数据说明:

    Total:1035108KB。表示物理内存总大小。

    Used:1008984KB。表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

    Free:26124KB。表示未被分配的内存。

    Shared:0kb。共享内存,一般系统不会用到。

    Buffers:124212KB。系统分配但未被使用的buffers 数量。

    Cached:413000KB。系统分配但未被使用的cache 数量。

    -/+ buffers/cache 行(第二行)数据说明:

    Used:471772kb,实际使用的buffers 与cache 总量,也是实际使用的内存总量。

    Free: 563336kb, 未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

    根据以上分析,可以得出一下结论:

    1. 实际可用内存大小:

    Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);

    563336 = 26124 + 124212+ 413000

    2. 已经分配的内存大小:

    Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)

    1008984kb = 471772 + 124212 +413000

    3. 物理内存总大小

    total(Mem)= used(-/+ buffers/cache) + free(-/+ buffers/cache)

    1035108 = 471772 + 563336

    4. buffer 与cache 的区别

    A buffer is something that has yet to be "written" to disk. 

    A cache is something that has been "read" from the disk and stored for later use.

    4.1 Cache

    Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。

    由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。

    Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

    4.2 Buffer

    Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

    在Free命令中显示的buffer和cache,它们都是占用内存:

    buffer : 作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。

    cache: 作为page cache的内存, 文件系统的cache,是memory的缓冲区

    如果cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小

    Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。

      简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
  • 相关阅读:
    Apache CXF入门
    C++中关于类型转换的问题讨论
    makefile实例(3)-多个文件实例优化
    makefile实例(2)-多个文件实例
    makefile实例(1)-helloworld
    【原创】Linux下编译链接中常见问题总结
    tcpdump命令
    共享内存基础
    关于TCP/UDP缓存
    TCP/UDP常见问题小结
  • 原文地址:https://www.cnblogs.com/Alexr/p/9385847.html
Copyright © 2011-2022 走看看