• linux内存查看及释放


    查看内存

    常用的查看内存工具有:top,ps,free,/proc/meminfo,/proc/$PID/status等,一般都指定了虚拟内存占用情况,但ps或/proc/$PID/status中RSS或RSZ指定的是实际内存大小。

    root:~# free
                 total         used         free       shared      buffers
    Mem:        123776        71712        52064            0         8036
    -/+ buffers:              63676        60100
    Swap:            0            0            0

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

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

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

    释放缓存

    Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

    所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

    要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

    0 – 不释放
    1 – 释放页缓存
    2 – 释放dentries和inodes
    3 – 释放所有缓存

    知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

    首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

    #sync

    接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:

    #echo 3 > /proc/sys/vm/drop_caches

    此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

    要查询当前缓存释放的参数,可以输入下面的指令:

    #cat /proc/sys/vm/drop_caches

    linux内核文档对此描述如下:

    drop_caches
    
    Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
    
    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
    
    As this is a non-destructive operation and dirty objects are not freeable, the user should run `sync' first.

    参考:

    1. linux 内存清理/释放命令

    2. Linux内存详解

    3. Linux查看CPU和内存使用情况

    4. /proc/meminfo分析

    5. 从free到page cache

  • 相关阅读:
    三维偏序(陌上花开)
    【题解】洛谷P4735最大异或和
    【题解】CF#229 E-Gifts
    【题解】JXOI2017颜色
    【题解】SDOI2009Bill的挑战
    【题解】CF#960 H-Santa's Gift
    【题解】Atcoder ARC#85 E-MUL
    【题解】CF#1012 C-Hill
    【题解】CF#852 E-Casinos and travel
    【题解】Atcoder ARC#90 F-Number of Digits
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/9028234.html
Copyright © 2020-2023  润新知