ubuntu 内存占用解析
ubuntu? 內存占用解析
最近在使用電腦的時候,使用top 命令,發現ubuntu內存使用很緊張:
我的電腦是512 Mb的內存,可以看到使用了467Mb? 還剩8Mb了,但是打開系統監視器的時候
可以看到兩個內存顯示不一樣,到底以哪一個為準呢?仔細觀察一下,命令行中的cached占用的內存161456k
加上系統監視器的306Mb,差不多就是現在內存使用的情況467Mb。
網上查了一下:
用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
然后第一行那個464是總共使用的內存,連cache也算進去了,不用看,第二行290才是真正的占用了。173是空閑的。
也就是說使用了290Mb的內存
參見:
Linux 內存機制
Mem:表示物理內存統計。
-/+ buffers/cached:表示物理內存的緩存統計
Swap:表示硬盤上交換分區的使用情況。只有mem被當前進程實際占用完,即沒有了buffers和cache時,才會使用到swap。
Mem 行(第一行)數據說明:
Total:1035108KB。表示物理內存總大小。
Used:1008984KB。表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存并未實際使用。
Free:26124KB。表示未被分配的內存。
Shared:0kb。共享內存,一般系統不會用到。
Buffers:124212KB。系統分配但未被使用的buffers 數量。
Cached:413000KB。系統分配但未被使用的cache 數量。
-/+ buffers/cache 行(第二行)數據說明:
Used:471772kb,實際使用的buffers 與cache 總量,也是實際使用的內存總量。
Free: 563336kb, 未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。
根據以上分析,可以得出一下結論:
1. 實際可用內存大小:
Free(-/+ buffers/cache行)= Free(Mem)+buffers(Mem)+Cached(Mem);
563336 = 26124 + 124212+ 413000
2. 已經分配的內存大小:
Used(Mem) = Used(-/+ buffers/cache)+ buffers(Mem) + Cached(Mem)
1008984kb = 471772 + 124212 +413000
3. 物理內存總大小
total(Mem)= used(-/+ buffers/cache) + free(-/+ buffers/cache)
1035108 = 471772 + 563336
二. 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.
2.1 Cache
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。
2.2 Buffer
Buffer:緩沖區,一個用于存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。通過緩沖區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的設備的操作進程不發生間斷。
在Free命令中顯示的buffer和cache,它們都是占用內存:
buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區,更靠近存儲設備,或者直接就是disk的緩沖區。
cache: 作為page cache的內存, 文件系統的cache,是memory的緩沖區
?如果cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀IO 必會非常小
free命令里各項內存指標說明:
total used free shared buffers cached
Mem: 16425996 10727220 5698776 0 380904 9389832
-/+ buffers/cache: 956484 15469512
Swap: 8273464 212 8273252
其中第一行用全局角度描述系統使用的內存狀況:
total——總物理內存
used——已使用內存,一般情況這個值會比較大,因為這個值包括了cache+應用程序使用的內存
free——完全未被使用的內存
shared——應用程序共享內存
buffers——緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加)
cached——緩存,用于已打開的文件
總結:
total=used+free
used=buffers+cached (maybe add shared also)
第二行描述應用程序的內存使用:
前個值表示-buffers/cache——應用程序使用的內存大小,used減去緩存值
后個值表示+buffers/cache——所有可供應用程序使用的內存大小,free加上緩存值
總結:?
-buffers/cache=used-buffers-cached
+buffers/cache=free+buffers+cached
第三行表示swap的使用:
used——已使用
free——未使用
什么是Cache Memory(緩存內存):
當你讀寫文件的時候,Linux內核為了提高讀寫性能與速度,會將文件在內存中進行緩存,這部分內存就是Cache Memory(緩存內存)。即使你的程序運行結束后,Cache Memory也不會自動釋放。這就會導致你在Linux系統中程序頻繁讀寫文件后,你會發現可用物理內存會很少。
其實這緩存內存(Cache Memory)在你需要使用內存的時候會自動釋放,所以你不必擔心沒有內存可用。如果你希望手動去釋放Cache Memory也是有辦法的。
如何釋放Cache Memory(緩存內存):
用下面的命令可以釋放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一下,防止丟失數據。
總結
以上是生活随笔為你收集整理的ubuntu 内存占用解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 12.04下关闭图形界面
- 下一篇: virtualBox中的ubuntu共享