- 论坛徽章:
- 1
|
为什么我的linux占用98%的内存?
這個問題也常被新手們問到, 我這裡簡單說一下好了.
首先, 我們的 memory 的 real usage 得視 kernel + application 的總用量而定.
當 physical memory 不足此限時, 則會起用 swap 空間作置換,
將一些"暫時"用不到的 memory data 挪到 disk 去.
我想, 大家對這個現像較好理解, 也就是: physical memory 不足就起用 swap .
不過, 若情形顛倒過來: physical memory 很多, 過剩了又如何呢?
最簡單的處理就是: 剩就剩, 置之不理. 但你不覺得是個浪費嗎?!
的確浪費! 那如何加以利用?
於是 linux 會將過剩的 physical memory 挪來作 cache / share memory 來用.
這可以將一些常要用到的, 但是存放於較慢 I/O (如 disk) 的資料擺進 memory 裡,
如此, 就能提升系統的效能了!
因為 memory 的 bus speed 比起其它 I/O bus 來說快很多倍.
這也就是起用 swap (將 memory data 擺到 disk)會讓系統變慢,
但起用 cache/share (將 disk data 擺到 memory)會讓系統變快的主要原因了.
linux 系統會盡量的利用閒置的 memory 來改善效能表現,
這是很不錯的 idea .
因此當你開機兩三天, 你會發現 memory 都用光了!
請別慌張! 你要扣掉了 cache/share 之後, 那才是真正用掉的空間.
為此, 較新版本的 free 命令, 你可直接參考如下這行:
-/+ buffers/cache: xxxxxx yyyyyy
就知到實際上用掉多少(xxxx)及剩下多少(yyyyy)了...
最後, 還要了解的是:
既然 cache/share 是"廢物利用"的原理,
換而言之, 就是隨時可以被犧牲的...
也就是: 當 physical memory 不變的情況下, kernel+applcation 越用越多時,
那 cache/share 的空間就會被壓縮, 以騰出來給真正的"主人"使用.
這大家也好理解吧?
然而, 在 kernel 關於 memory management 的設計上,
cache/share 空間是不能完全不用的,
因此, 當 real usage 成長到一定程度, 且將 cache/share 壓鎖到最小極限時,
那麼, swap apace 還是會被起用的.
不過, 這通常是系統 loading peak time 時才會發生,
也就是一段時間內(如一天)只有少部份時間(如數十分鐘)會達到峰值.
而絕對不應是個常態, 否則, 就是到了增加內存的時間了....
希望以上說明, 能讓大家有個大概.
真有興取去挖根源的話, 可能要追 kernel source 代碼了. |
|