linux内存查看及释放

查看内存

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

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)node

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

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

释放缓存

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

因此,咱们仍是有必要来手动进行Linux下释放内存的操做,其实也就是释放缓存的操做了。post

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

0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放全部缓存url

知道了参数后,咱们就能够根据咱们的须要,使用下面的指令来进行操做。spa

首先咱们须要使用sync指令,将全部未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。不然在释放缓存的过程当中,可能会丢失未保存的文件。.net

#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

相关文章
相关标签/搜索