釋放內存


在Linux系統下,咱們通常不須要去釋放內存,由於系統已經將內存管理的很好。可是凡事也有例外,有的時候內存會被緩存佔用掉,致使系統使用SWAP空間影響性能,此時就須要執行釋放內存(清理緩存)的操做了。node

Linux系統的緩存機制是至關先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁盤塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操做。可是在進行了大量文件操做以後,緩存會把內存資源基本用光。但實際上咱們文件操做已經完成,這部分緩存已經用不到了。這個時候,咱們難道只能眼睜睜的看着緩存把內存空間佔據掉麼?緩存

因此,咱們仍是有必要來手動進行Linux下釋放內存的操做,其實也就是釋放緩存的操做了。yii

要達到釋放緩存的目的,咱們首先須要瞭解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值爲0,也就是不釋放緩存。他的值能夠爲0~3之間的任意數字,表明着不一樣的含義:ide

0 – 不釋放
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放全部緩存性能

知道了參數後,咱們就能夠根據咱們的須要,使用下面的指令來進行操做。this

首先咱們須要使用sync指令,將全部未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。不然在釋放緩存的過程當中,可能會丟失未保存的文件。code

#syncserver

接下來,咱們須要將須要的參數寫進/proc/sys/vm/drop_caches文件中,好比咱們須要釋放全部緩存,就輸入下面的命令:內存

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

此指令輸入後會當即生效,能夠查詢如今的可用內存明顯的變多了。

要查詢當前緩存釋放的參數,能夠輸入下面的指令:

#cat /proc/sys/vm/drop_caches


----------------------------------------------------------------

1.清理前內存使用狀況
free -m

2.開始清理
echo 1 > /proc/sys/vm/drop_caches

3.清理後內存使用狀況
free -m

4.完成!

查看內存條數命令:

dmidecode | grep -A16 "Memory Device$"


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

# sync
# echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

cache釋放:
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一下,防止丟數據。

由於LINUX的內核機制,通常狀況下不須要特地去釋放已經使用的cache。這些cache起來的內容能夠增長文件以及的讀寫速度。

先說下free命令怎麼看內存

[root@yuyii proc]# free

total used free shared buffers cached
Mem: 515588 295452 220136 0 2060 64040
-/+ buffers/cache: 229352 286236
Swap: 682720 112 682608

其中第一行用全局角度描述系統使用的內存情況:
total——總物理內存
used——已使用內存,通常狀況這個值會比較大,由於這個值包括了cache+應用程序使用的內存
free——徹底未被使用的內存
shared——應用程序共享內存
buffers——緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增長)
cached——緩存,用於已打開的文件
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——未使用

手動執行sync命令(描述:sync 命令運行 sync 子例程。若是必須中止系統,則運行 sync 命令以確保文件系統的完整性。sync 命令將全部未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches
[root@server test]# cat /proc/sys/vm/drop_caches
3


!將/proc/sys/vm/drop_caches值設爲3


有關/proc/sys/vm/drop_caches的用法在下面進行了說明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become
free.

To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects