關於Linux的記憶體(free -m)
檢視Linux伺服器下的記憶體使用情況,可以使用命令free -m。注意此命令只在Linux下有效,在FreeBSD中沒有此命令。命令如下所示:
used:已經使用的記憶體數
free:空閒的記憶體數
shared:多個程式共享的記憶體總額
-buffers/cache:(已用)的記憶體數,即used-buffers-cached
+buffers/cache:(可用)的記憶體數,即free+buffers+cached
得出結論:
可用記憶體的計算公式為:
可用記憶體=free+buffers+cached,即215MB+11MB+57MB=253MB
Linux的記憶體是拿來用的,而不是拿來看的。我與一個朋友探討Linux的使用情況時,他問我為什麼Linux使用的記憶體這麼高。他機器上1GB的記憶體free才232MB,而Windows XP才用了200MB不到的樣子。這其實是被Linux的free命令之表象迷惑了,Linux的記憶體使用是很有講究的。還是舉例說明,如下的free命令所顯示的是當前記憶體的使用情況,-m的意思是用M個位元組來顯示內容,我們來一起看看。
在第一部分Mem行中有如下引數。
total:記憶體總數,即378MB
used:已經使用的記憶體數,即769MB
free:空閒的記憶體數,即232MB
shared:當前已經廢棄不用,總是0
buffers Buffer:快取記憶體數,即62MB
cached Page:快取記憶體數,即421MB
其中,記憶體總數與已使用記憶體數和空閒記憶體數的關係是:
total(1002M)=used(769M)+free(232M)
在第二部分內容(-/+buffers/cache)中各引數如下所示。
(-buffers/cache):used記憶體數,即286MB(指的是第一部分Mem行中的used-buffers-cached)。
(+buffers/cache):free記憶體數,即715MB(指的是第一部分Mem行中的free+buffers+cached)。
可見-buffers/cache反映的是被程式實實在在用掉的記憶體,而+buffers/cache反映的是可以挪用的記憶體總數。
第三部分是指交換(swap)分割槽,大家應該都明白,這裡就不再講了。
有可能大家看了上面的解釋還是不太明白。比如:第一部分(Mem)與第二部分(-/+buffers/cache)的結果有關,used和free為什麼這麼奇怪?其實我們可以從兩個方面來分析。對作業系統來講這兩項是Mem的引數,buffers/cached都屬於被使用,所以它認為free只有232MB;對應用程式來講+buffers/cached等同於可用的記憶體,因為buffer/cached可提高程式執行的效能,當程式使用記憶體時,buffer/cached很快就會被使用。所以從應用的角度來看,應以(-/+buffers/cache)的free和used為主,即我們主要看與它相關的free和used就可以了。另外告訴大家一些常識,為了提高磁碟和記憶體的存取效率,對Linux做了很多精心的設計,除了對dentry進行快取(用於VFS、加速檔案路徑名到inode的轉換)外,還採取了兩種主要Cache方式:Buffer Cache和Page Cache。前者用於針對磁碟塊的讀寫,後者用於針對檔案inode的讀寫。這些Cache能有效地縮短I/O系統呼叫(比如read、write、getdents)的時間。
在Linux中,記憶體是拿來用的,不是拿來看的。而在Windows中,無論你的真實實體記憶體有多少,它都會用硬碟交換檔案來讀,即使是記憶體還有一大部分。這也就是Windows常常提示虛擬空間不足的原因。可以想見,硬碟怎麼會快過記憶體,所以我們在觀察Linux的記憶體使用情況時,只要沒發現用swap的交換空間,就不用擔心自己的記憶體太少。如果常常看到swap用了很多,那麼你就要考慮加實體記憶體了。這也是在Linux伺服器上看記憶體是否夠用的標準。
ZZ:http://27151.blog.51cto.com/17151/978904
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-751248/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於圖片在記憶體中的大小(k或者M)記憶體
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- 關於autoreleasepool記憶體管理記憶體
- 關於JavaScript的記憶體機制JavaScript記憶體
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- linux命令檢視記憶體命令free -h whereis locate find查詢命令Linux記憶體
- 何時需要關注 Linux 的記憶體用量?Linux記憶體
- 關於虛擬機器記憶體和JVM記憶體設定的思考虛擬機記憶體JVM
- 關於PHP記憶體洩漏的問題PHP記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 關於JVM堆外記憶體的一切JVM記憶體
- 關於java記憶體訪問重排序的思考Java記憶體排序
- 關於持久記憶體(PMem)你知道多少?記憶體
- Linux共享記憶體的管理Linux記憶體
- [Linux]共享記憶體Linux記憶體
- Linux下基於記憶體分析的Rootkit檢測方法Linux記憶體
- Linux實體記憶體管理Linux記憶體
- [20191220]關於共享記憶體段相關問題.txt記憶體
- C/C++使用malloc為結構體陣列分配記憶體(及free釋放記憶體)的三種方法C++結構體陣列記憶體
- [效能]【JVM】關於JVM記憶體的N個問題JVM記憶體
- Linux 的記憶體分頁管理Linux記憶體
- Linux的記憶體分頁管理Linux記憶體
- Linux共享記憶體(二)Linux記憶體
- Linux 虛擬記憶體Linux記憶體
- android 關於記憶體優化的一些總結Android記憶體優化
- 關於dataWithContentsOfFile 讀取大檔案的記憶體問題記憶體
- 基於記憶體的關聯式資料庫memsql初探記憶體資料庫SQL
- Linux記憶體子系統——Locking Pages(記憶體鎖定)Linux記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- Linux記憶體效能指標和工具的對應關係圖Linux記憶體指標
- Linux記憶體不足的處理方法Linux記憶體
- Linux記憶體是怎麼工作的?Linux記憶體
- Linux:深入淺出 Linux 共享記憶體Linux記憶體
- Linux 記憶體區管理 slabLinux記憶體
- linux記憶體管理(二)- vmallocLinux記憶體
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- [20191223]關於共享記憶體段相關問題3.txt記憶體
- [20190320]關於使用smem檢視記憶體使用的問題.txt記憶體