061-linux服務器釋放內存

Linux釋放內存的命令:
sync
echo 1 > /proc/sys/vm/drop_caches


drop_caches的值能夠是0-3之間的數字,表明不一樣的含義:
0:不釋放(系統默認值)
1:釋放頁緩存
2:釋放dentries和inodes
3:釋放全部緩存

釋放完內存後改回去讓系統從新自動分配內存。
echo 0 >/proc/sys/vm/drop_caches

free -m #看內存是否已經釋放掉了。

若是咱們須要釋放全部緩存,就輸入下面的命令:
echo 3 > /proc/sys/vm/drop_caches

######### Linux釋放內存的相關知識 ###############

在Linux系統下,咱們通常不須要去釋放內存,由於系統已經將內存管理的很好。可是凡事也有例外,有的時候內存會被緩存佔用掉,致使系統使用SWAP空 間影響性能,例如當你在linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直做爲caching。,此時就需 要執行釋放內存(清理緩存)的操做了。

Linux系統的緩存機制是至關先進的,他會針對dentry(用於VFS,加速文件路徑名到inode的轉換)、Buffer Cache(針對磁盤塊的讀寫)和Page Cache(針對文件inode的讀寫)進行緩存操做。可是在進行了大量文件操做以後,緩存會把內存資源基本用光。但實際上咱們文件操做已經完成,這部分 緩存已經用不到了。這個時候,咱們難道只能眼睜睜的看着緩存把內存空間佔據掉嗎?因此,咱們仍是有必要來手動進行Linux下釋放內存的操做,其實也就是 釋放緩存的操做了。/proc是一個虛擬文件系統,咱們能夠經過對它的讀寫操做作爲與kernel實體間進行通訊的一種手段.也就是說能夠經過修改 /proc中的文件,來對當前kernel的行爲作出調整.那麼咱們能夠經過調整/proc/sys/vm/drop_caches來釋放內存。要達到釋 放緩存的目的,咱們首先須要瞭解下關鍵的配置文件/proc/sys/vm/drop_caches。這個文件中記錄了緩存釋放的參數,默認值爲0,也就 是不釋放緩存。

通常複製了文件後,可用內存會變少,都被cached佔用了,這是linux爲了提升文件讀取效率的作法:爲了提升磁盤存取效率, Linux作了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還採起了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(好比read,write,getdents)的時間。"

釋放內存前先使用sync命令作同步,以確保文件系統的完整性,將全部未寫的系統緩衝區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件。不然在釋放緩存的過程當中,可能會丟失未保存的文件。

[root@fcbu.com ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          7979       7897         82          0         30       3918
-/ buffers/cache:       3948       4031
Swap:         4996        438       4558

第一行用全局角度描述系統使用的內存情況:
total 內存總數
used 已經使用的內存數,通常狀況這個值會比較大,由於這個值包括了cache 應用程序使用的內存
free 空閒的內存數
shared 多個進程共享的內存總額
buffers 緩存,主要用於目錄方面,inode值等(ls大目錄可看到這個值增長)
cached 緩存,用於已打開的文件

第二行描述應用程序的內存使用:
-buffers/cache 的內存數:used - buffers - cached
buffers/cache 的內存數:free buffers cached
前個值表示-buffers/cache 應用程序使用的內存大小,used減去緩存值
後個值表示 buffers/cache 全部可供應用程序使用的內存大小,free加上緩存值

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

可用的內存=free memory buffers cached。

爲何free這麼小,是否關閉應用後內存沒有釋放?
但實際上,咱們都知道這是由於Linux對內存的管理與Windows不一樣,free小並非說內存不夠用了,應該看的是free的第二行最後一個值:-/ buffers/cache:       3948       4031 ,這纔是系統可用的內存大小。node

實際項目中的經驗告訴咱們,若是由於是應用有像內存泄露、溢出的問題,從swap的使用狀況是能夠比較快速能夠判斷的,但free上面反而比較難查看。我以爲既然核心是能夠快速清空buffer或cache,但核心並無這樣作(默認值是0),咱們不該該隨便去改變它。linux

通常狀況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生內存不足、應用獲取不到可用內存、OOM錯 誤等問題時,仍是更應該去分析應用方面的緣由,如用戶量太大致使內存不足、發生應用內存溢出等狀況,不然,清空buffer,強制騰出free的大小,可 能只是把問題給暫時屏蔽了,因此說通常狀況下linux都不用常常手動釋放內存。緩存

相關文章
相關標籤/搜索