Linux Free命令与cache和buffer的主要区别
本文是轉(zhuǎn)載的,不知道為啥不能直接轉(zhuǎn)載到51,所以copy了下,原文地址是:
http://blog.sina.com.cn/s/blog_7a1285bb0100ziep.html
free 命令相對(duì)于top 提供了更簡(jiǎn)潔的查看系統(tǒng)內(nèi)存使用情況,用來(lái)顯示內(nèi)存的使用情況,使用權(quán)限是所有用戶
語(yǔ)法
free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]
常用參數(shù)詳解
-b, -k,-m,-g:分別以字節(jié)( bytes、KB、MB、GB)為單位顯示內(nèi)存使用情況
-s? delay:顯示每隔多少秒數(shù)來(lái)顯示一次內(nèi)存使用情況(與-c一起使用)
-c:按每隔幾秒顯示內(nèi)存使用情況時(shí)的刷新次數(shù)(與-s一起使用)
-t:顯示內(nèi)存總和列。
-o:不顯示緩沖區(qū)調(diào)節(jié)列
-V:free的版本
# free -m
?????????????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:????????? 3034?????? 2938???????? 96????????? 0??????? 101?????? 1300
-/+ buffers/cache:?????? 1536?????? 1497
Swap:???????? 1983???????? 71?????? 1912
Total:??????? 5018?????? 3010?????? 2008
Mem:表示物理內(nèi)存統(tǒng)計(jì)
-/+ buffers/cached:表示物理內(nèi)存的緩存統(tǒng)計(jì)
Swap:表示硬盤上交換分區(qū)的使用情況,這里我們不去關(guān)心。
系統(tǒng)的總物理內(nèi)存:3034M,但系統(tǒng)當(dāng)前真正可用的內(nèi)存b并不是第一行free 標(biāo)記的 96M,它僅代表未被分配的內(nèi)存。
我們使用total1、used1、free1、used2、free2 等名稱來(lái)代表上面統(tǒng)計(jì)數(shù)據(jù)的各值,1、2 分別代表第一行和第二行的數(shù)據(jù)。
total1:表示物理內(nèi)存總量。
used1:表示總計(jì)分配給緩存(包含buffers 與cache )使用的數(shù)量,但其中可能部分緩存并未實(shí)際使用。
free1:未被分配的內(nèi)存。
shared1:共享內(nèi)存,一般系統(tǒng)不會(huì)用到,這里也不討論。
buffers1:系統(tǒng)分配但未被使用的buffers 數(shù)量。
cached1:系統(tǒng)分配但未被使用的cache 數(shù)量。buffer 與cache 的區(qū)別見后面。
used2:實(shí)際使用的buffers 與cache 總量,也是實(shí)際使用的內(nèi)存總量。
free2:未被使用的buffers 與cache 和未被分配的內(nèi)存之和,這就是系統(tǒng)當(dāng)前實(shí)際可用內(nèi)存。
可以整理出如下等式:
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
?
free2 = buffers1 + cached1 + free1
1)第一行:mem,表示操作系統(tǒng)物理內(nèi)存使用情況( 針對(duì)操作系統(tǒng)而言)
total 241:表示物理內(nèi)存總量為241M
used 61:表示總計(jì)分配給緩存(包含buffers 與cache,及應(yīng)用程序 )使用的數(shù)量,但其中可能部分緩存并未實(shí)際使用,即61M
free 180:表示未被分配的內(nèi)存數(shù)據(jù)為180M
share 0:表示應(yīng)該程序的共享內(nèi)存為0M
buffers 7:表示系統(tǒng)分配但未被使用的buffers數(shù)量
cached 36:表示系統(tǒng)分配但未被使用的cache數(shù)量
公式如下:
(1)total=used+free=61M+180M=241M
(2)used=buffers+cached (maybe add shared also)+application=7+36+17=60(因采用MB為單位,所以存在誤差)
注意: 為了提高磁盤存取效率, Linux做了一些精心的設(shè)計(jì), 除了對(duì)dentry進(jìn)行緩存(用于VFS,加速文件路徑名到inode的轉(zhuǎn)換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。(呵呵!看到了吧,所以針對(duì)操作系統(tǒng)的內(nèi)存使用情況,usered=buffers+cached+application)前者針對(duì)磁盤塊的讀寫,后者針對(duì)文件inode的讀寫。這些Cache有效縮短了 I/O系統(tǒng)調(diào)用(比如read,write,getdents)的時(shí)間
2)第二行:-/+ buffers/cached,表示應(yīng)用程序的內(nèi)存使用情況? (針對(duì)應(yīng)用程序而言)
-buffers/cache:應(yīng)用程序使用的內(nèi)存大小(等于used-緩存值=61-7-36=18M,因采用MB為單位,所以存在誤差)
+buffers/cache:所有可供應(yīng)用程序使用的內(nèi)存大小(等于free+緩存值=180+7+36=223M)
所以-buffer/cache反映的是:程序?qū)崒?shí)在在吃掉的內(nèi)存;而+buffer/cache反映的是:可以挪用的內(nèi)存總數(shù)
公式如下:
(1)-buffers/cache=used-buffers-cached
(2)+buffers/cache=free+buffers+cached
注意:由于第二行描述的是應(yīng)用程序的內(nèi)存使用情況,所以這里的used表示當(dāng)前應(yīng)用程序所占用的內(nèi)存,而free則表示應(yīng)用程序還可以使用內(nèi)存(總的物理內(nèi)存 - 應(yīng)用程序已經(jīng)使用的)
3)第三行:Swap,表示硬盤上交換分區(qū)的使用情況
total 1019:表示總的交換分區(qū)的空間大小
used 0:表示當(dāng)前還沒有使用交換分區(qū)那部分空間
free 1019:表示還可用的交換分區(qū)的空間大小
注意:linux 系統(tǒng)中,如果swap分區(qū)的空量也開始使用的話,則表示你的內(nèi)存可能不夠用,需要加一些內(nèi)存了,因?yàn)閘inux是先使用內(nèi)存的容量,當(dāng)內(nèi)存不夠用時(shí),才會(huì) 使用swap分區(qū)的空間,這一點(diǎn)也正是與windows的區(qū)別;windows是使用swap分區(qū),后使用內(nèi)存的(看了很生氣,有內(nèi)存不用,反而使用磁盤 中所劃分出來(lái)的虛擬內(nèi)存,你說(shuō)直接使用內(nèi)存好,還是讀取磁盤好,當(dāng)然是直接讀內(nèi)存)
二、 buffer 與cache 的區(qū)別
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.
更詳細(xì)的解釋參考:Difference Between Buffer and Cache
對(duì)于共享內(nèi)存(Shared memory),主要用于在UNIX 環(huán)境下不同進(jìn)程之間共享數(shù)據(jù),是進(jìn)程間通信的一種方法,一般的應(yīng)用程序不會(huì)申請(qǐng)使用共享內(nèi)存,筆者也沒有去驗(yàn)證共享內(nèi)存對(duì)上面等式的影響。如果你有興趣,請(qǐng)參考:What is Shared Memory?
cache 和 buffer的區(qū)別:
Cache:高速緩存,是位于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲(chǔ)器。由于CPU的速度遠(yuǎn)高于主內(nèi)存,CPU直接從內(nèi)存中存取數(shù)據(jù)要等待一 定時(shí)間周期,Cache中保存著CPU剛用過(guò)或循環(huán)使用的一部分?jǐn)?shù)據(jù),當(dāng)CPU再次使用該部分?jǐn)?shù)據(jù)時(shí)可從Cache中直接調(diào)用,這樣就減少了CPU的等待 時(shí)間,提高了系統(tǒng)的效率。Cache又分為一級(jí)Cache(L1 Cache)和二級(jí)Cache(L2 Cache),L1 Cache集成在CPU內(nèi)部,L2 Cache早期一般是焊在主板上,現(xiàn)在也都集成在CPU內(nèi)部,常見的容量有256KB或512KB L2 Cache。
Buffer:緩沖區(qū),一個(gè)用于存儲(chǔ)速度不同步的設(shè)備或優(yōu)先級(jí)不同的設(shè)備之間傳輸數(shù)據(jù)的區(qū)域。通過(guò)緩沖區(qū),可以使進(jìn)程之間的相互等待變少,從而使從速度慢的設(shè)備讀入數(shù)據(jù)時(shí),速度快的設(shè)備的操作進(jìn)程不發(fā)生間斷。
Free中的buffer和cache:(它們都是占用內(nèi)存):
buffer : 作為buffer cache的內(nèi)存,是塊設(shè)備的讀寫緩沖區(qū)
cache: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache
如果 cache 的值很大,說(shuō)明cache住的文件數(shù)很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀IO bi會(huì)非常小。
參考:http://bbs.chinaunix.net/archiver/tid-478109.htmlhttp://bbs.chinaunix.net/archiver/tid-478109.html
另:
說(shuō)一下我的理解:
??????? cache, 是用來(lái)加速讀取的一種方法。目的是加速讀取。物理上,有cpu管理的L1 cache, L2 cache (both data cache and instruction cache), 和memory里的cache (如os管理的文件系統(tǒng)cache).
????? 對(duì)于cache的訪問, 分為cache hit or cache miss. 通常cache越大, cache命中率就越高,訪問速度越快。訪問者不知道數(shù)據(jù)一定在cache中。
?????? Buffer, 只指memory的區(qū)域, 軟件用來(lái)保存特定的信息。buffer按需分配,足夠保存數(shù)據(jù)就行了,不求最大。軟件有合適的機(jī)制,知道數(shù)據(jù)在buffer里。
?
?
轉(zhuǎn)載于:https://blog.51cto.com/unixlike/764885
總結(jié)
以上是生活随笔為你收集整理的Linux Free命令与cache和buffer的主要区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决flask端口被占用的问题
- 下一篇: 新浪微博页面html代码,js实现选中页