Linux-Memory小記
圖:
-------------------------------------------1.引數含義-----------------------------------------------------------------------
Mem:表示實體記憶體統計
total: 表示系統總實體記憶體5993156kb(約5852M)
used: 表示總計分配給快取(包含buffers 與cached),但其中可能部分快取未實際使用
free:表示未分配的記憶體
shared: 表示共享記憶體
buffers:表示系統分配但未被使用的buffers數量
cached:表示系統分配但未被使用的cache的數量
在Free命令中顯示的buffer和cache,它們都是佔用記憶體:
buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區,更靠近儲存裝置,或者直接就是disk的緩衝區。
cached: 作為page cache的記憶體, 檔案系統的cache,是memory的緩衝區 。
如果cached 的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀IO 必會非常小 。
-/+ buffers/cached: 表示實體記憶體的快取統計
used: 表示實際使用的buffers與cache的總量,這就是實際使用的記憶體總量
free: 表示未被使用的buffers與cache和未被分配的記憶體之和,這就是系統當前實際可能記憶體(所以一般linux機器看可用記憶體就看此值)
Swap: 表示硬碟上交換分割槽的使用情況。只有mem被當前程式實際佔用完,即沒有了buffers和cache時,才會使用到swap。
-------------------------------------------2.常用概念-----------------------------------------------------------------------
實體記憶體總大小 :
mem.total=mem.used+mem.free
mem.total=(-/+ buffers/cached).used+(-/+ buffers/cached).free
已經分配的記憶體大小:
mem.used=mem.buffers+mem.cached+(-/+ buffers/cached).used
實際可用記憶體大小:
(-/+ buffers/cached).free=mem.free+mem.buffers+mem.cached
-------------------------------------------3.手工清除快取------------------------------------------------------------------
# sync
# echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches
cache釋放:
a.To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
b.To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
c.To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
說明,釋放前最好sync一下,防止丟資料。
-------------------------------------------4.常見疑惑-----------------------------------------------------------------------
1.使用者常見的疑問是,為什麼free這麼小,是否關閉應用後記憶體沒有釋放?
但實際上,我們都知道這是因為Linux對記憶體的管理與Windows不同,free小並不是說記憶體不夠用了,應該看的是free的第二行最後一個值:-/+ buffers/cache: 2592892Kb,這才是系統可用的記憶體大小。
2.free記憶體還有200M,cache裡有58G,然後程式就跪了,拋了個tcmalloc allocation failed 65536, out of memory(needed 65312 bytes). 需要記憶體時為什麼cache裡面的沒能釋放?
cache 中有程式在佔用就無法釋放了。
3.有時候free太小,cached特別大時啟動mysql會報錯,這個是什麼原因?
這說明記憶體確實不夠,cached並不是全部可以釋放的,有程式佔用就不能釋放了
4.我的Linux上cache佔滿RAM時系統非常慢,系統也不自動釋放cache。所以號稱“cache對效能只有好處而沒壞處”是假的!
這個要看你實際是使用的應用是什麼。cache能帶來的好處是,減輕頻繁讀寫硬碟的需要,也就是降低IO,這特別是對於伺服器上的應用來說是很常見的。相反,如果cache需要頻繁更新,那會出現您提到的問題了
5.我們該怎樣定位出記憶體洩露問題?(這個問題我一直在思考,也有工具去檢測,假如有很好的方法的話,希望小夥伴們給我留言,謝謝)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2131678/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vue小記Vue
- 面試小記面試
- Cookie小記Cookie
- webpack小記Web
- JAVA小記Java
- autoprefixer小記
- PostgreSQL小記SQL
- QSizeGrip 小記
- java小記-Java
- 小記 Demo
- 延安小記
- 微信小程式開發小記微信小程式
- 分治FFT小記?FFT
- sed命令小記
- Git命令小記Git
- golang 切片小記Golang
- 陣列小記陣列
- Docker 建站小記Docker
- Java集合小記Java
- JavaScript 小記錄JavaScript
- 負margin小記
- top使用小記
- 程式生涯小記
- linux小記Linux
- java小記-scannerJava
- git submodule小記Git
- 數論小記
- 博弈論小記
- tmux 使用小記UX
- 小程式專案之填坑小記
- 索引儲存小記索引
- PyCharmforMac快捷鍵小記PyCharmORMMac
- 前端小bug記錄前端
- 小程式-記牌器
- Java常用小筆記Java筆記
- java學習小記Java
- Dockerfile 小記之FROMDocker
- C#小筆記C#筆記