尽管 RAM 大约有 75% 是空闲的,但交换过多

尽管 RAM 大约有 75% 是空闲的,但交换过多

我有一个 VPS,配备 9GB RAM、300GB HDD、3 GB 交换空间、7 核。操作系统是 CentOS 5.7 Final。

我的机器上运行着 postgres9.0,并进行了适当的调整(至少通过 PostgreSQL 的书籍/wiki)。

大多数情况下,当运行某些复杂查询时(复杂是指选择最多 3 个连接),尽管我的 RAM 有 ~75% 未使用,但仍有 ~99% 的交换正在发生。

编辑 :我在这里提到的可用 RAM 是通过 (可用 + 缓冲 + 缓存) 计算的。'free -m' 显示的实际可用 RAM 几乎不到 2%。所以如果我错了,请纠正我。

此外,它搞砸了我的磁盘 IO,大多数时候达到约 100%,并减慢了其他一切。(我倾向于相信我的磁盘出了问题。)

我不明白为什么会发生这么多的交换。是因为上下文切换吗?大多数时候我的处理器处于空闲状态,而在选择期间,IO 等待时间高达 30%。

如果有人能对此作出解释我将不胜感激。

谢谢。

答案1

当内存页使用频率不高时,即使还有剩余内存,Linux 内核也会决定将其放入交换区。您可以通过以下方式调整内存管理器的“swappiness”来调整此行为:

$ echo 50 > /proc/sys/vm/swappiness

其中是(尽可能少交换)和(尽可能多交换)50之间的一个值。0100

也可以看看维基百科:swappiness阅读有关此内容的更多信息。

答案2

看起来您可能正在查看正确的值,但只是为了以防万一您没有查看到,并且也为了防止其他人查看到错误的数字。

$ free -mt
             total       used       free     shared    buffers     cached
Mem:          2027       1953         73          0         66       1501
-/+ buffers/cache:        385       1641 <---- this value is actually free
Swap:         4086          0       4086
Total:        6113       1954       4159

这是我们总部库存/ERP 系统,为 40 多名总部员工服务并协调 9 个分支机构库存/ERP 系统,80%(1641MB)的 RAM 使用量被认为是免费的,但它并没有被浪费,而是做了一些有用的事情,充当了缓冲区/缓存。

相关内容