Linux free -m 詳細說明


free -m命令詳解

 
1
2
3
4
5
[root @localhost  ~]# free -m
              total       used       free     shared    buffers     cached
Mem:           7869        7651         218           1         191        5081
-/+ buffers/cache:        2378        5490
Swap:           478         139         339

1,2表示1,2行的內容

total1:表示物理,內存總量

used1:總計分配給緩存(包含Buffer和cache)使用的數量,但其中可能部分緩存並未實際使用

free1:未被分配的內存

shared1:共享內存,一般系統不會用到,這里也不討論

buffers1:系統分配但未被使用的buffers數量

cached1:系統分配但未被使用的cache數量

used2:實際使用的buffers和cache總量,也是實際使用的內存總量

free2:未被使用的Buffers和cache和未被分配的內存之和,這就是系統當前實際可用內存。

如下公式:

buffer和cache也是內存的一部分,如果需要,可以釋放這2部分的內存

pagecache和buffercache的區別:

pagecache實際上是針對文件系統的,是文件的緩存,在文件上的數據會緩存到pagecahce,文件的邏輯層需要映射到實際的物理磁盤,這種映射關系由文件系統來完成,當pagecache中的數據需要刷新時,pagecache中的數據交給buffercache。但這種處理在2.6版本內核之后就變得簡單了,沒有真正意義的cache操作。

buffercache是針對磁盤塊的緩存,也就是在沒有文件系統的情況下,直接對磁盤操作的數據會緩存到buffercache中,如:文件系統的元數據都會緩存到buffercache中。簡單來說,

pagecache用來緩存文件數據,buffercache用來緩存磁盤數據。在有文件系統的情況下,對文件操作,數據會緩存到pagecache。若直接采用dd工具對磁盤進行讀寫,那么數據會

緩存到buffercache。

cache和buffer的區別:

buffer is something that has yet to be "written" to disk

cache is something that has been "read" from the disk and stored for later use

對於共享內存(shared memory) :主要用於在unix下不同進程間共享數據,是進程間通信一種方法,一般的應用程序不會申請共享內存。

cache:高速緩存,是位於CPU和主內存間一種容量較小但速度很高的存儲器。由於CPU從主內存獲取數據要等待一段時間,cahce中保存這CPU剛用過或循環使用的一部分數據,CPU再次使用該部分數據時,可從cache中直接調用,這樣就減少了CPU的等待時間。cache又分為L1和L2,L2早期焊在主板上,現在都在CPU中。常見的L2容量有256KB和512KB

3.free中的buffer和cache都是基於內存

buffer作為buffercache的內存,是塊設備的讀寫緩沖區,

cache作為pagecache的內存,文件系統的cache

如果cache的值很大,說明cache中的文件數很多,如果頻繁訪問到的文件都能被cache住,那么磁盤的讀IO必會非常小。

如何釋放cachememory:

1
2
3
4
5
6
7
8
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一下,防止丟失數據,但是<strong>一般情況下沒有必要手動釋放內存<br></strong>

總結:

cachecpu和內存之間的,buffer內存和磁盤之間的,都是為了解決速度不對等的問題。

緩存(cache)是把讀取過來的數據保存起來,重新讀取時若命中,就不去硬盤了,若沒有命中就去讀硬盤,其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀取的內容不斷往后排,直至從中刪除。

緩沖(buffer)時根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的的反復尋道,從而提高系統性能,linux有一個守護進程定期清空緩沖內容(即寫入磁盤)。

也可以通過sync命令手動清空緩沖。舉個例子:我這里有個ext2的的u盤,我往里面cp一個3M的mp3,但u盤的燈沒有跳動,過了一會(或者手動輸入sync),U盤的燈就跳動起來了。卸載設備時會清空緩存,所以有時候卸載一個設備要等上幾秒中。

修改/etc/sysctl.conf中的vm.swappiness右邊的數字可以在下次開機時調節swap使用策略。該數字范圍是0~100,數字越大越傾向於使用swap。默認為60,可以改一下試試。–兩者都是RAM中的數據。

buffer是即將要寫入磁盤的,而cache是被從磁盤中讀出來的

buffer由各種進程分配,被用在如輸入隊列等方面。一個簡單的例子是某個進程要求有多個字段讀入,在所有字段被讀入完整之前,進程把先前讀入的字段放在buffer中保存。

cache經常被用在磁盤的I/O請求上,如果有多個進程要訪問某個文件,於是該文件被做成cache以便下次被訪問,這樣可以提高系統性能。

Buffer Cachebuffer cache,又稱bcache,其中文名稱為緩沖器高速緩沖存儲器,簡稱緩沖器高緩。另外,buffer cache按照其工作原理,又被稱為塊高緩


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM