002_Linux-Memory專題

1、單獨查看某個進程的內存佔用node

pmap 736 | tail -n 1

2、mysql

之前我對這塊認識很模糊,並且還有錯誤的認識;今天由我同事提醒,因此我決定來好好的縷縷這塊的關係。

圖:



  linux

-------------------------------------------1.參數含義-----------------------------------------------------------------------
Mem:表示物理內存統計
   total: 表示系統總物理內存5993156kb(約5852M)
   used: 表示總計分配給緩存(包含buffers 與cached),但其中可能部分緩存未實際使用
   free:表示未分配的內存
   shared: 表示共享內存
   buffers:表示系統分配但未被使用的buffers數量
   cached:表示系統分配但未被使用的cache的數量sql

在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).freeblog

已經分配的內存大小:
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須要頻繁更新,那會出現您提到的問題了

相關文章
相關標籤/搜索