51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux内存(手动释放cache)

1、查看内存

free

                      $ free -h
             total       used       free     shared    buffers     cached
Mem:          125G        89G        36G        92K       212M        74G
\-/+ buffers/cache:        14G       111G 
Swap:         7.5G       1.8G       5.6G 

                    </code>
                  </pre>



 
**cat /proc/meminfo**

 
如果你想得到更加相近的信息可以使用cat /proc/meminfo,直接看硬件的统计数据。

 
                        
                          MemTotal:       131755760 kB
    MemFree:        38151680 kB
    Buffers:          217564 kB
    Cached:         78274852 kB
    SwapCached:         6072 kB
    Active:         29647292 kB
    Inactive:       50949268 kB
    Active(anon):    2073604 kB
    Inactive(anon):    30640 kB
    Active(file):   27573688 kB
    Inactive(file): 50918628 kB
    Unevictable:           0 kB
    Mlocked:               0 kB
    SwapTotal:       7812092 kB
    SwapFree:        5889924 kB
    Dirty:               804 kB
    Writeback:             0 kB
    AnonPages:       2100436 kB
    Mapped:           442904 kB
    Shmem:                92 kB
    Slab:           12017476 kB
    SReclaimable:   11910264 kB
    SUnreclaim:       107212 kB
    KernelStack:       31184 kB
    PageTables:        37492 kB
    NFS\_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:    73689972 kB
    Committed\_AS:   25708340 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:      491656 kB
    VmallocChunk:   34290629896 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:    694272 kB
    HugePages\_Total:       0
    HugePages\_Free:        0
    HugePages\_Rsvd:        0
    HugePages\_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:        4096 kB
    DirectMap2M:     2019328 kB
    DirectMap1G:    132120576 kB

                        </code>
                      </pre>



     
    这里我 们看到,内存总数total=125G,已使用used=89G,空闲free=36G,cache=78G。其他类型不等。

     
    先解释一下:

     
                            
                              total 内存总数
        used 已经使用的内存数
        free 空闲的内存数
        shared 多个进程共享的内存总额
        buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
        \-buffers/cache (已用)的内存数:used - buffers - cached
        +buffers/cache(可用)的内存数:free + buffers + cached
        可用的memory\=free memory+buffers+cached

                            </code>
                          </pre>



         
        这里可以看到我们使用了89G,其中cache占用了78G。这个占用有点高,并且不会自动释放。

         
        **2、什么是cache**

         
        为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

         
        cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .

         
        Free中的buffer和cache:(它们都是占用内存): 
         buffer : 作为buffer cache的内存,是块设备的读写缓冲区 
         cache: 作为page cache的内存, 文件系统的cache 
         如果 cache 的值很大,说明cache住的文件数很多。

         
        **3、手动释放cache**

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

         
        释放方法有三种(系统默认值是0,释放之后你可以再改回0值 ):

         
        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

         
        注意:在清空缓存前我们需要在linux系统中执行一下sync命令,将缓存中的未被写入磁盘的内容写到磁盘上

         
        具体的操作如下

         
                                
                                  \# 先查看一下释放cache信令值, 此时应该是0
            $ cat /proc/sys/vm/drop\_caches 
            0

            将缓冲区写入磁盘, 当需要停止系统的时候, 保证文件系统的完整性
            ================================



            $ sync


            释放cache, 这个命令可能要花费一点时间, 请耐心等待
            =============================



            $ echo 3 \> /proc/sys/vm/drop_caches


            再看一眼
            ====



            $ cat /proc/sys/vm/drop_caches
            3


                                </code>
                              </pre>



             
            再来看一眼内存

             
                                    
                                      $ free -h
                             total       used       free     shared    buffers     cached
                Mem:          125G       3.5G       122G        88K        13M       444M
                \-/+ buffers/cache:       3.1G       122G 
                Swap:         7.5G       1.8G       5.6G 

                                    </code>
                                  </pre>



                 
                cache已经释放,free=122G。

赞(2)
未经允许不得转载:工具盒子 » Linux内存(手动释放cache)