1. 程式人生 > >linux內存管理及手動釋放機制

linux內存管理及手動釋放機制

並不是 環境 dirty for drop sha 寫到 inode cpu

inux系統中查看內存狀態一般都會用到free
技術分享
linux的free命令中,cached和buffers的區別
Free
Mem:表示物理內存統計
  -/+ buffers/cached:表示物理內存的緩存統計
  Swap:表示硬盤上交換分區的使用情況
  系統的總物理內存:8098060 8Gb,但系統當前真正可用的內存並不是第一行free 標記的6054972Kb,它僅代表未被分配的內存。
  我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計數據的各值,1、2 分別代表第一行和第二行的數據。
  total:表示物理內存總量。
  used:表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存並未實際使用。
  free:未被分配的內存。
  shared:共享內存,一般系統不會用到,這裏也不討論。
  buffers:系統分配但未被使用的buffers 數量。
  cached:系統分配但未被使用的cache 數量。buffer 與cache 的區別見後面。
note:
total=used+free
used=buffers+cached (maybe add shared also)
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.
對於共享內存(Shared memory),主要用於在UNIX 環境下不同進程之間共享數據,是進程間通信的一種方法,一般的應用程序不會申請使用共享內存,筆者也沒有去驗證共享內存對上面等式的影響。
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會非常小

內存釋放機制


關於drop_caches的官方說明如下:

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.

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 are not freeable, the user should run sync first.


/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整.那麽我們可以通過調整/proc/sys/vm/drop_caches來釋放內存.操作如下:
#cat /proc/sys/vm/drop_caches
0
首先,/proc/sys/vm/drop_caches的值,默認為0
手動執行sync命令
描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行 sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件
#sync
#echo 3 > /proc/sys/vm/drop_caches
#cat /proc/sys/vm/drop_caches
3
將/proc/sys/vm/drop_caches值設為3
再次執行free查看內存已釋放完畢。

linux內存管理及手動釋放機制