|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 529|回復: 0
打印 上一主題 下一主題

linux内存使用率free

[複製鏈接]

24

主題

0

好友

354

積分

中學生

Rank: 3Rank: 3

  • TA的每日心情
    慵懶
    2024-2-29 13:55
  • 簽到天數: 136 天

    [LV.7]常住居民III

    推廣值
    0
    貢獻值
    0
    金錢
    137
    威望
    354
    主題
    24
    樓主
    發表於 2013-12-18 15:23:13
    root@Emos ~]# top
    Tasks: 131 total,   1 running, 130 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   4138480k total,  3368264k used,   770216k free,   156800k buffers
    Swap: 10241428k total,        0k used, 10241428k free,  2783368k cached
    我是4G的内存,使用了3个多G,很费解,接着free看看。
    [root@emos ~]# free -m
                                      total       used       free     shared    buffers     cached
    Mem:                       4041       3288      752          0           153         2718
    -/+ buffers/cache:                 417       3623
    Swap:                       10001        0        10001
    蓝色部分:
    total 内存总数: 4041M;
    used 已经使用的内存数: 3288M;
    free  空闲的内存数: 752M
    shared 不同进程间用来进行数据交换,一般都是0(多个进程共享的内存总额)
    buffers 是由各种进程分配的,被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。: 153M
    cached 经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。:2718M
    绿色部分:
    (-buffers/cache) used内存数:417M (指的第一部分Mem行中的used – buffers – cached)
    ( buffers/cache) free内存数: 3623M (指的第一部分Mem行中的free buffers cached)
    黄色部分:
    交换分区,就不说了,自己也会明白。
           我们可能会纳闷儿,蓝色部分(Mem)与绿色部分(-/+ buffers/cache)的结果中,有关used和free为什么这么奇怪?我们可以从二个方面来解释:
            对操作系统来讲是Mem的参数buffers和cached 都是属于被使用,它认为free只有752M。
            对应用程序来讲是(-/+ buffers/cach),buffers和cached 是等同可用的,buffer和cached是为了提高程序执行的性能,当程序使用内存时,buffer和cached会很快地被使用。
            以应用来看看,以(-/+ buffers/cache)的free和used为主.我们看这个就好了.Linux为了提高磁盘和内存存取效率, 开发人员做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache.前者针对磁盘块的读写,后者针对文件inode的读写.这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间.
            内存是拿来用的,不是拿来看的。不像windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读。这也就是windows为什么有时会提示虚拟空间不足的原因。在内存还有大部分的时候,拿出一部分硬盘空间来充当内存,硬盘怎么会快过内存?我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准。
           那么有人说过段时间linux会自动释放掉所用的内存,我们使用free再来试试,看看是否有释放:
    [root@emos ~]# free -m
                                        total        used       free      shared    buffers     cached
    Mem:                         4041       3288        752          0            153          2718
    -/+ buffers/cache:                    417        3623
    Swap:                        10001         0        10001
    没有任何变化,那么我们就需要手动释放内存。
        /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段,也就是说可以通过修改/proc中的文件来对当前kernel的行为做出调整。我们可以通过调整/proc/sys/vm/drop_caches来释放内存:
    [root@emos ~]# cat /proc/sys/vm/drop_caches   //默认为0
    0
    [root@emos ~]# sync   //sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
    [root@emos ~]# echo 3 > /proc/sys/vm/drop_caches
    [root@emos ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          4041        381       3659          0          0         18    //cached被释放
    -/+ buffers/cache:        362       3678
    Swap:        10001          0      10001
    [root@emos ~]# cat /proc/sys/vm/drop_caches     //再次查看内核参数变为3了。
    3
    有效的释放了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  becomefree.
    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
      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.
      更详细的解释参考:Difference Between Buffer and Cache
    对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,如果你有兴趣,请参考:What is Shared Memory?
      cache 和 buffer的区别:
    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。
    Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。
      Free中的buffer和cache:(它们都是占用内存):
    buffer: 作为buffer cache的内存,是块设备的读写缓冲区
    cache: 作为page cache的内存, 文件系统的cache
      如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的IO会非常小。
    Buffer和Cache的区别
        缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就无需去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
        缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。

    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-5-29 07:41 , Processed in 0.017913 second(s), 17 queries , Gzip On, Memcache On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部