Linux的基本原則是沒有資源應該被浪費.因此核心會使用儘可能多的RAM,來緩衝來自本地和遠端檔案系統的資訊.系統做讀寫操作的時候,會將與當前啟動並執行進程相關的資料盡量儲存在RAM裡.系統報告的緩衝是緩衝和頁緩衝兩者之和.緩衝並不是在進程結束的時候被回收(你可能很快會啟動另外一個進程,需要同樣的資料),而是隨需回收–比如,當你啟動一個需要大量記憶體的進程時,Linux核心會從記憶體中回收緩衝,將得到的記憶體配置給新的進程.
有些地區,比如匿名記憶體映射(mmps)和共用記憶體地區,它們被報告為緩衝,但不是被核心直接釋放.一般的緩衝不映射到進程的地址空間,僅僅是簡單的核心映射,而這些特別的緩衝映射到所有掛接到它們上面的進程.
所以你執行top命令看到的
Tasks: 330 total, 3 running, 327 sleeping, 0 stopped, 0 zombie
Cpu(s): 13.4% us, 6.3% sy, 0.0% ni, 79.0% id, 0.7% wa, 0.7% hi, 0.0% s
Mem: 2066800k total, 1962740k used, 104060k free, 50828k buffers
Swap: 2097136k total, 960k used, 2096176k free, 1349532k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6921 my_sql 15 0 131m 20m 5244 S 27 1.0 244:57.46 mysqld
18665 vhost 15 0 24980 10m 3588 S 3 0.5 0:00.34 httpd
19878 vhost 16 0 25800 11m 3584 S 3 0.6 0:00.10 httpd
19900 vhost 15 0 24884 10m 3584 S 1 0.5 0:00.03 httpd
Mem: 2066800k total, 1962740k used,並不是代表你的應用程式已經使用了1.9G的記憶體,這1.9G是包含了:應用程式記憶體 + 緩衝 + 緩衝的記憶體的,需要用free命令查看.
下面是一個例子(單位是MB):
# free -m
total used free shared buffers cached
Mem: 2018 1927 91 0 45 1293
-/+ buffers/cache: 588 1430
Swap: 2047 0 2047
在這裡例子中,應用程式只使用了588MB記憶體,還有1430MB空閑記憶體可以使用.
一些簡單的計算方法:
物理已用記憶體 = 實際已用記憶體 - 緩衝 - 緩衝
= 1927M - 45M - 1293M
物理空閑記憶體 = 總實體記憶體 - 實際已用記憶體 + 緩衝 + 緩衝
應用程式可用空閑記憶體 = 總實體記憶體 - 實際已用記憶體
應用程式已用記憶體 = 實際已用記憶體 - 緩衝 - 緩衝