Linux內存釋放機制

 linux的free命令中,cached和buffers的區別node

Free
  free 命令相對於top 提供了更簡潔的查看系統內存使用狀況:
  $ free
  total used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/+ buffers/cache: 26408 228860Swap: 265000 0 265000
  Mem:表示物理內存統計
  -/+ buffers/cached:表示物理內存的緩存統計
  Swap:表示硬盤上交換分區的使用狀況,這裏咱們不去關心。
  系統的總物理內存:255268Kb(256M),但系統當前真正可用的內存b並非第一行free 標記的 16936Kb,它僅表明未被分配的內存。
  咱們使用total一、used一、free一、used二、free2 等名稱來表明上面統計數據的各值,一、2 分別表明第一行和第二行的數據。
  total1:表示物理內存總量。
  used1:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。
  free1:未被分配的內存。
  shared1:共享內存,通常系統不會用到,這裏也不討論。
  buffers1:系統分配但未被使用的buffers 數量。
  cached1:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。
  used2:實際使用的buffers 與cache 總量,也是實際使用的內存總量。
  free2:未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。
  能夠整理出以下等式:
  total1 = used1 + free1total1 = used2 + free2used1 = buffers1 + cached1 + used2free2 = buffers1 + cached1 + free1
  buffer 與cache 的區別
  A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.
  更詳細的解釋參考:Difference Between Buffer and Cache
  對於共享內存(Shared memory),主要用於在UNIX 環境下不一樣進程之間共享數據,是進程間通訊的一種方法,通常的應用程序不會申請使用共享內存,筆者也沒有去驗證共享內存對上面等式的影響。若是你有興趣,請參考:What is Shared Memory?
  cache 和 buffer的區別:
  Cache:高速緩存,是位於CPU與主內存間的一種容量較小但速度很高的存儲器。因爲CPU的速度遠高於主內存,CPU直接從內存中存取數據要等待必定時間週期,Cache中保存着CPU剛用過或循環使用的一部分數據,當CPU再次使用該部分數據時可從Cache中直接調用,這樣就減小了CPU的等待時間,提升了系統的效率。Cache又分爲一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache集成在CPU內部,L2 Cache早期通常是焊在主板上,如今也都集成在CPU內部,常見的容量有256KB或512KB L2 Cache。
  Buffer:緩衝區,一個用於存儲速度不一樣步的設備或優先級不一樣的設備之間傳輸數據的區域。經過緩衝區,可使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的設備的操做進程不發生間斷。
  Free中的buffer和cache:(它們都是佔用內存):
  buffer : 做爲buffer cache的內存,是塊設備的讀寫緩衝區
  cache: 做爲page cache的內存, 文件系統的cache
  若是 cache 的值很大,說明cache住的文件數不少。若是頻繁訪問到的文件都能被cache住,那麼磁盤的讀IO bi會很是小
 
內存釋放機制

/proc是一個虛擬文件系統,咱們能夠經過對它的讀寫操做作爲與kernel實體間進行通訊的一種手段.也就是說能夠經過修改/proc中的文件,來對當前kernel的行爲作出調整.那麼咱們能夠經過調整/proc/sys/vm/drop_caches來釋放內存.操做以下:linux

cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默認爲0web

sync緩存

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

 echo 3 > /proc/sys/vm/drop_caches
cat /proc/sys/vm/drop_caches
3spa

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

請查看圖片,已經將內存釋放。
 進程

  能夠看出內存已釋放完畢。
相關文章
相關標籤/搜索