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

相關文章
相關標籤/搜索