可用内存突然激增

可用内存突然激增

我在使用 Kernel 2.6 的 Squeeze 上遇到一些奇怪的内存管理行为。我正在尝试用 nmon 来弄清楚这个问题的真相。

有时这会使系统冻结 30 秒到 5 分钟。

服务器有 4GB RAM。

nmon 的数据是:

  • +1.6GB 内存空闲。
  • 缓存下降约 350MB
  • swapcached 减少了约 80MB
  • 交换空间增加了~200M
  • 活动内存减少约 1.3GB

发生这种情况时,服务器不会接近任何限制。发生这种情况后不久,活动内存就会慢慢回升,同时缓存...以及自然的 memfree 也会下降。

这似乎不是一个失控的过程。操作系统似乎突然重新分配了一堆内存,然后慢慢地重新分配回来。交换性不应该成为一个因素,因为交换几乎从未被触及。

有什么办法可以跟踪正在发生的事情吗?为什么这个空闲内存会在几秒内突然出现,却在30分钟内又归还给缓存?

答案1

系统日志说什么?是否有任何迹象表明内核因 OOM 而终止进程?

互换有多大?您是否调整了vm.命名空间中的任何内核?

“一堆”多少钱?

这30分钟里会发生什么?它vmstat -SM 3看起来像什么?

也许最重要的是:您正在运行哪些应用程序,它们(如何)受到此影响?

答案2

结果发现这是 DoS。大约 60 个 php5-cgi 进程在 30 秒内出现并死亡,吸回 1.6GB RAM,然后被杀死。

它没有出现在我的日志中,因为它不是一个占用 1.6GB 的进程,而是 60 个进程。 oom 杀手并没有杀死它,Apache 中的某些东西正在杀死它。

当我调整进程日志记录以获取进程的广度并编写一些 awk 脚本来添加它们的内存时,我终于找到了它。现在看来很明显了。

相关内容