- 论坛徽章:
- 0
|
原帖由 tom0732 于 2008-9-17 22:40 发表
问题是经常出现一种情况用free查看内存才使用几百兆(总共4G的内存),但已经开始使用虚拟内存了.这是怎么回事啊?
按理说有缓存可以重复调用啊.
个人理解.. 没找到太多的理论依据:
当执行一些需要大量内存的软件,内存中暂时不用的数据就有可能被交换到swap。
有一种“SWAP惶恐处理”的机制,大概是说,
当内存使用激增,内存管理系统不知道这种激增会持续多久,也不知道会有多大需求,
当激增达到一个阙值的时候,内存管理系统会提前转移内存中部分数据(非cache)到swap,尽力避免物理内存不足。
而被用做cache的内存,内核是不必担心的,在需要这部份内存的时候,被cache的数据可以立刻丢弃
考虑上面两个原因,系统中仍有内存用做cache,却开始使用swap,是可能的。
关键的一点,cache虽然使用了物理内存,但cache中的数据随时可以被立刻drop掉,
在某种程度上说,被用作cache的内存和空闲状态差别不大。
关于swap的使用,不能单从free命令的swap使用数量来考察,还要结合vmstat中swap的读写情况来考虑。
vmstat命令显示的列表中,“si so ”下的数值显示了swap的实时读写状况。
- # vmstat
- procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
- r b swpd free buff cache si so bi bo in cs us sy id wa
- 1 0 224 50812 185752 1477916 0 0 42 99 61 136 9 8 82 1
复制代码
[ 本帖最后由 maitr 于 2008-9-18 23:31 编辑 ] |
|