• linux系统缓存机制


    http://my.oschina.net/lenglingx/blog/425258

    1、缓存机制

      为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。

    缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。

    CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

    2、查看缓存区及内存使用情况

    [root@localhost ~]# free -m

          total       used       free     shared    buffers     cached

    Mem:    7866       7725       141      19        74       6897

    -/+ buffers/cache:     752       7113

    Swap:   16382        32      16350

    可以看到内存总共8G,已使用7725M,剩余141M,不少的人都是这么看的,这样并不能作为实际的使用率。因为有了缓存机制,具体该怎么算呢?

    空闲内存=free(141)+buffers(74)+cached(6897)

    已用内存=total(7866)-空闲内存

    由此算出空闲内存是7112M,已用内存754M,这才是真正的使用率,也可参考-/+ buffers/cache这行信息也是内存正确使用率。

    3、可见缓存区分为buffers和cached,他们有什么区别呢?

     内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。buffers用来缓存metadata及pages,可以理解为系统缓存,例如,vi打开一个文件。cached是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。

    4、随便说下Swap做什么用的呢?

     Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。

    5、怎样释放缓存区内存呢?

     5.1 直接改变内核运行参数

     #释放pagecache

     echo 1 >/proc/sys/vm/drop_caches

     #释放dentries和inodes

     echo 2 >/proc/sys/vm/drop_caches

     #释放pagecache、dentries和inodes

     echo 3 >/proc/sys/vm/drop_caches 

     5.2 也可以使用sysctl重置内核运行参数 

     sysctl -w vm.drop_caches=3 

    注意:这两个方式都是临时生效,永久生效需添加sysctl.conf文件中,一般写成脚本手动清理,建议不要清理

    http://www.ha97.com/4337.html

    有时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存free项会很少,此时查看系统的 /proc/meminfo 文件,会发现有一项 Cached Memory:

    输入cat /proc/meminfo查看:

    MemTotal: 16425996 kB
    MemFree: 5698808 kB
    Buffers: 380904 kB
    Cached: 9389356 kB
    SwapCached: 212 kB
    Active: 6569200 kB
    Inactive: 3725364 kB
    HighTotal: 0 kB
    HighFree: 0 kB
    LowTotal: 16425996 kB
    LowFree: 5698808 kB
    SwapTotal: 8273464 kB
    SwapFree: 8273252 kB
    Dirty: 980 kB
    Writeback: 0 kB
    AnonPages: 524108 kB
    Mapped: 24568 kB
    Slab: 381776 kB
    PageTables: 7496 kB
    NFS_Unstable: 0 kB
    Bounce: 0 kB
    CommitLimit: 16486460 kB
    Committed_AS: 2143856 kB
    VmallocTotal: 34359738367 kB
    VmallocUsed: 267656 kB
    VmallocChunk: 34359469303 kB
    HugePages_Total: 0
    HugePages_Free: 0
    HugePages_Rsvd: 0
    Hugepagesize: 2048 kB

    free命令里各项内存指标说明:


    total used free shared buffers cached
    Mem: 16425996 10727220 5698776 0 380904 9389832
    -/+ buffers/cache: 956484 15469512
    Swap: 8273464 212 8273252

    其中第一行用全局角度描述系统使用的内存状况:
    total——总物理内存
    used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
    free——完全未被使用的内存
    shared——应用程序共享内存
    buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
    cached——缓存,用于已打开的文件
    总结:
    total=used+free
    used=buffers+cached (maybe add shared also)

    第二行描述应用程序的内存使用:
    前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
    后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值
    总结: 
    -buffers/cache=used-buffers-cached
    +buffers/cache=free+buffers+cached

    第三行表示swap的使用:
    used——已使用
    free——未使用

    什么是Cache Memory(缓存内存):

    当你读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

    其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory也是有办法的。

    如何释放Cache Memory(缓存内存):

    用下面的命令可以释放Cache Memory:

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

    注意,释放前最好sync一下,防止丢失数据。

    总结:个人经验认为没必要手动释放,这种内存管理方式也是比win优胜的地方之一!因为Linux的内核内存管理机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以提高文件以及磁盘的读写速度。

  • 相关阅读:
    八字案例董易奇
    nginx和tomcat二合一服务器配置SSL证书
    RecyclerView,内容不居中的解决办法。
    cxf接口生成WSDL带密码的code实践
    去除server.key的密码
    Window下openssl的安装教程(通俗易懂)
    Nginx配置https证书
    自己做CA
    自己生成ssl证书
    自己制作ssl证书:自己签发免费ssl证书,为nginx生成自签名ssl证书
  • 原文地址:https://www.cnblogs.com/virusolf/p/4948457.html
Copyright © 2020-2023  润新知