Ubuntu虚拟内存caching吸收内存

我有一个Ubuntu 9.10 64位服务器似乎用尽所有可用的内存。 根据我的munin图表,几乎所有用完的内存都在swap cache,cache和slab cache中。 (我认为这意味着虚拟内存caching,我是否正确地承担这一点?)

一旦内存使用率接近100%,一些(尽pipe不是全部)系统服务(如SSH)变得缓慢和不响应。 重新启动系统后,性能和内存使用情况一度正常。

一些有趣的花絮:

  • 系统运行Apache 2,MySQL,Munin和sshd。
  • 内存使用率峰值每天晚上在同一时间发生(下午10点)。
  • 对于任何用户来说,crontab中都没有任何内容,并且/etc/cron.d/*中的任何内容都与众不同,更不用说在晚上10点发生的事情了。

我的问题是,我怎么知道什么是造成内存吮吸? 我已经尝试了通常的工具(例如ps,top等),但我似乎无法find任何不寻常的东西。

有任何想法吗? 提前致谢!

你确定它是内存相关的吗? caching不应该吸所有的内存; 它们是临时的和dynamic的,并且需要重新分配为活动内存。 caching只是在那里加快速度,并利用内存,否则将浪费。

我可能会看到你是否有其他东西在系统中陷入困境。 在使用Top时,您是否看到很高的系统负载? 那些与“正常”时代相比的时代是什么? 您是否将CPU使用率和活动内存使用排在前列?

你有没有尝试运行iotop来查看磁盘I / O,看看有什么东西在锤击驱动器?

所有的crontabs是什么样子的?

你有没有在白天几次拍摄ps的快照,并在大约10:00左右比较,看看有什么过程出现?

在一个远射,如何与netstat的networking连接? 当时有什么不寻常的进出系统?

听起来像它可能正在重build或索引系统数据库,如“定位”,但它不应该减慢系统停止这样做。

记忆的使用和呆滞是同样问题的症状。 当时发生的事情导致系统的磁盘caching发生颠簸。 系统使用每一滴内存来避免多余的磁盘I / O,但仍然失败。

当大量的磁盘读取发生在最近没有被读取的磁盘区域时,这是最常见的。 可能再次使用的最近使用的数据被从caching中移出,并且当它需要被读回时,它必须与现有的读取stream程竞争。

检查一些进行大量磁盘I / O的过程。 例如, updatedb或某种备份脚本。 如果事实certificate这是一个自制的工具,它可能会帮助将其更改为绕过磁盘caching,因此不会强制caching中的其他内容。 这可能有助于ionice它,所以它不会伤害时间敏感的读取。