ubuntu 内存占用解析
ubuntu? 內(nèi)存占用解析
最近在使用電腦的時(shí)候,使用top 命令,發(fā)現(xiàn)ubuntu內(nèi)存使用很緊張:
我的電腦是512 Mb的內(nèi)存,可以看到使用了467Mb? 還剩8Mb了,但是打開(kāi)系統(tǒng)監(jiān)視器的時(shí)候
可以看到兩個(gè)內(nèi)存顯示不一樣,到底以哪一個(gè)為準(zhǔn)呢?仔細(xì)觀察一下,命令行中的cached占用的內(nèi)存161456k
加上系統(tǒng)監(jiān)視器的306Mb,差不多就是現(xiàn)在內(nèi)存使用的情況467Mb。
網(wǎng)上查了一下:
用free -m命令查看
lyh@lyh-desktop:~$ free -m???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:?????????? 464??????? 414???????? 49????????? 0????????? 3??????? 120
-/+ buffers/cache:??????? 290??????? 173
Swap:????????? 445???????? 23??????? 422
然后第一行那個(gè)464是總共使用的內(nèi)存,連cache也算進(jìn)去了,不用看,第二行290才是真正的占用了。173是空閑的。
也就是說(shuō)使用了290Mb的內(nèi)存
參見(jiàn):
Linux 內(nèi)存機(jī)制
Mem:表示物理內(nèi)存統(tǒng)計(jì)。
-/+ buffers/cached:表示物理內(nèi)存的緩存統(tǒng)計(jì)
Swap:表示硬盤(pán)上交換分區(qū)的使用情況。只有mem被當(dāng)前進(jìn)程實(shí)際占用完,即沒(méi)有了buffers和cache時(shí),才會(huì)使用到swap。
Mem 行(第一行)數(shù)據(jù)說(shuō)明:
Total:1035108KB。表示物理內(nèi)存總大小。
Used:1008984KB。表示總計(jì)分配給緩存(包含buffers 與cache )使用的數(shù)量,但其中可能部分緩存并未實(shí)際使用。
Free:26124KB。表示未被分配的內(nèi)存。
Shared:0kb。共享內(nèi)存,一般系統(tǒng)不會(huì)用到。
Buffers:124212KB。系統(tǒng)分配但未被使用的buffers 數(shù)量。
Cached:413000KB。系統(tǒng)分配但未被使用的cache 數(shù)量。
-/+ buffers/cache 行(第二行)數(shù)據(jù)說(shuō)明:
Used:471772kb,實(shí)際使用的buffers 與cache 總量,也是實(shí)際使用的內(nèi)存總量。
Free: 563336kb, 未被使用的buffers 與cache 和未被分配的內(nèi)存之和,這就是系統(tǒng)當(dāng)前實(shí)際可用內(nèi)存。
根據(jù)以上分析,可以得出一下結(jié)論:
1. 實(shí)際可用內(nèi)存大小:
Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);
563336 = 26124 + 124212+ 413000
2. 已經(jīng)分配的內(nèi)存大小:
Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)
1008984kb = 471772 + 124212 +413000
3. 物理內(nèi)存總大小
total(Mem)= used(-/+ buffers/cache) + free(-/+ buffers/cache)
1035108 = 471772 + 563336
二. 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.
2.1 Cache
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)部,常見(jiàn)的容量有256KB或512KB L2 Cache。
2.2 Buffer
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è)備的讀寫(xiě)緩沖區(qū),更靠近存儲(chǔ)設(shè)備,或者直接就是disk的緩沖區(qū)。
cache: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache,是memory的緩沖區(qū)
?如果cache 的值很大,說(shuō)明cache住的文件數(shù)很多。如果頻繁訪問(wèn)到的文件都能被cache住,那么磁盤(pán)的讀IO 必會(huì)非常小
free命令里各項(xiàng)內(nèi)存指標(biāo)說(shuō)明:
total used free shared buffers cached
Mem: 16425996 10727220 5698776 0 380904 9389832
-/+ buffers/cache: 956484 15469512
Swap: 8273464 212 8273252
其中第一行用全局角度描述系統(tǒng)使用的內(nèi)存狀況:
total——總物理內(nèi)存
used——已使用內(nèi)存,一般情況這個(gè)值會(huì)比較大,因?yàn)檫@個(gè)值包括了cache+應(yīng)用程序使用的內(nèi)存
free——完全未被使用的內(nèi)存
shared——應(yīng)用程序共享內(nèi)存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個(gè)值增加)
cached——緩存,用于已打開(kāi)的文件
總結(jié):
total=used+free
used=buffers+cached (maybe add shared also)
第二行描述應(yīng)用程序的內(nèi)存使用:
前個(gè)值表示-buffers/cache——應(yīng)用程序使用的內(nèi)存大小,used減去緩存值
后個(gè)值表示+buffers/cache——所有可供應(yīng)用程序使用的內(nèi)存大小,free加上緩存值
總結(jié):?
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
第三行表示swap的使用:
used——已使用
free——未使用
什么是Cache Memory(緩存內(nèi)存):
當(dāng)你讀寫(xiě)文件的時(shí)候,Linux內(nèi)核為了提高讀寫(xiě)性能與速度,會(huì)將文件在內(nèi)存中進(jìn)行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運(yùn)行結(jié)束后,Cache Memory也不會(huì)自動(dòng)釋放。這就會(huì)導(dǎo)致你在Linux系統(tǒng)中程序頻繁讀寫(xiě)文件后,你會(huì)發(fā)現(xiàn)可用物理內(nèi)存會(huì)很少。
其實(shí)這緩存內(nèi)存(Cache Memory)在你需要使用內(nèi)存的時(shí)候會(huì)自動(dòng)釋放,所以你不必?fù)?dān)心沒(méi)有內(nèi)存可用。如果你希望手動(dòng)去釋放Cache Memory也是有辦法的。
如何釋放Cache Memory(緩存內(nèi)存):
用下面的命令可以釋放Cache Memory:
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一下,防止丟失數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的ubuntu 内存占用解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 12.04下关闭图形界面
- 下一篇: ubuntu18.04安装pycharm