LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 936|回复: 2

求教centos5的内存使用分析

[复制链接]
发表于 2008-3-1 21:30:34 | 显示全部楼层 |阅读模式
  
 一直不懂linux的内存使用机制,我的是c42.0cpu 512m内存,安装的是centos5.0系统,各位帮分析一下怎么得知到底是不是内存不够了。
  
 
[root@localhost ~]# free
     total        used        free      shared     buffers      cached
Mem:        507404     500768       6636    0  26180   191972
-/+ buffers/cache:     282616     224788
Swap:      1951824          0    1951824
  



 
 
发表于 2008-3-1 21:44:33 | 显示全部楼层
没用swap表示内存够用,不过看样子也就刚刚够用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-1 21:44:45 | 显示全部楼层
首先, 我們的 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 時才會發生,
也就是一段時間內(如一天)只有少部份時間(如數十分鐘)會達到峰值.
而絕對不應是個常態, 否則, 就是到了增加內存的時間了....

buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。
#free
#man X
#free
#man X
#free
你可以先后比较一下free后显示buffers的大小。
另一个实验:
#free
#ls /dev
#free
你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表