默認(rèn)kb
vagrant@precise64:~$ free
total used free shared buffers cached
Mem: 374256 330952 43304 0 14400 238128
-/+ buffers/cache: 78424 295832
Swap: 786428 2224 784204
修改單位為M
root@precise64:/home/vagrant/test# free -m
total used free shared buffers cached
Mem: 365 69 295 0 0 5
-/+ buffers/cache: 64 301
Swap: 767 2 765
- total:物理內(nèi)存大小,就是機(jī)器實(shí)際的內(nèi)存
- used:已使用的內(nèi)存大小妹萨,這個(gè)值包括了 cached 和 應(yīng)用程序?qū)嶋H使用的內(nèi)存
- free:未被使用的內(nèi)存大小
- shared:共享內(nèi)存大小,是進(jìn)程間通信的一種方式
- buffers:被緩沖區(qū)占用的內(nèi)存大小之剧,后面會(huì)詳細(xì)介紹
- cached:被緩存占用的內(nèi)存大小,后面會(huì)詳細(xì)介紹
其中有
- total = used + free
下面一行得问,代表應(yīng)用程序?qū)嶋H使用的內(nèi)存:
- 前一個(gè)值表示 - buffers/cached,即 used - buffers/cached软免,表示應(yīng)用程序?qū)嶋H使用的內(nèi)存
- 后一個(gè)值表示 + buffers/cached椭赋,即 free + buffers/cached,表示理論上都可以被使用的內(nèi)存
不難看出來(lái)或杠,這兩個(gè)值加起來(lái)也是 total哪怔。
第三行表示 swap 的使用情況:總量、使用的和未使用的向抢。
cache
cache 就是緩存的意思认境。當(dāng)系統(tǒng)讀文件的時(shí)候,都是把數(shù)據(jù)從硬盤讀到內(nèi)存里挟鸠,因?yàn)橛脖P比內(nèi)存慢很多叉信,所以這個(gè)過(guò)程會(huì)很耗時(shí)。為了提高效率艘希,linux 會(huì)把讀進(jìn)來(lái)的文件在內(nèi)存中緩存下來(lái)(因?yàn)樽x取相近部分的內(nèi)容是程序很常見的情況)硼身,即使程序結(jié)束,cache 也不會(huì)被自動(dòng)釋放覆享。所以呢佳遂,如果有程序進(jìn)行大量的讀文件操作,你會(huì)發(fā)現(xiàn)內(nèi)存使用率就上去了撒顿。
不過(guò)也不用擔(dān)心丑罪,如果其他程序使用要使用內(nèi)存的時(shí)候,linux 也會(huì)把這些沒(méi)人使用的 cache 釋放掉凤壁,給其他運(yùn)行的程序使用吩屹。當(dāng)然你也可以手動(dòng)去釋放掉這部分內(nèi)存:
echo 1 > /proc/sys/vm/drop_caches
buffer
buffer 的意思和 cache 相近,不過(guò)稍有區(qū)別拧抖∪せ荩考慮內(nèi)存寫文件到硬盤的過(guò)程绑嘹,因?yàn)橛脖P太慢了可帽,如果內(nèi)存要等待數(shù)據(jù)寫完之后才繼續(xù)后面的操作窒舟,實(shí)在是效率很低的事情,也會(huì)影響程序的運(yùn)行速度袱吆。所以就有了 buffer厌衙,寫到硬盤的數(shù)據(jù)會(huì)放到 buffer 里面,內(nèi)存很快把數(shù)據(jù)寫到 buffer绞绒,可以繼續(xù)其他的工作婶希,而硬盤可以在后臺(tái)慢慢讀出 buffer 中的數(shù)據(jù),保存起來(lái)蓬衡。這樣就提高了讀寫的效率喻杈!
講一個(gè)大家會(huì)經(jīng)常遇到的例子彤枢,當(dāng)我們把電腦里中的文件拷貝到 U 盤的時(shí)候,如果文件特別大筒饰,大家會(huì)遇到這種情況:明明看到文件已經(jīng)拷貝完了缴啡,但系統(tǒng)還是會(huì)提示 U 盤正在使用中。這就是 buffer 的原因瓷们,拷貝程序把東西放到 buffer 之后业栅,但是 U 盤還沒(méi)有寫完。
同樣的谬晕,可以手動(dòng)來(lái) flush buffer 的內(nèi)容碘裕,使用的命令是sync
swap
swap 是實(shí)現(xiàn)虛擬內(nèi)存的重要概念。如果系統(tǒng)的負(fù)載太大攒钳,內(nèi)存被用完帮孔,可能會(huì)出現(xiàn)嚴(yán)重的問(wèn)題。swap 就是把硬盤上一部分空間當(dāng)做內(nèi)存使用不撑,正在運(yùn)行程序會(huì)使用物理內(nèi)存文兢,把沒(méi)有正在使用的內(nèi)存放到硬盤,這叫做 swap out焕檬;而把硬盤 swap 部分的內(nèi)存重新放到物理內(nèi)存中姆坚,叫做 swap in。
swap 可以再邏輯上擴(kuò)大內(nèi)存空間揩页,但是會(huì)造成系統(tǒng)變慢旷偿,因?yàn)橛脖P讀寫速度很慢烹俗。linux 系統(tǒng)比較智能爆侣,會(huì)把那些不怎么頻繁使用的內(nèi)存放到 swap。
【1】http://cizixs.com/2015/10/01/linux-memory-management-through-free