不可预测的内存爆炸

不可预测的内存爆炸

我公司的主服务器最近出现了大量停机时间。由于我和其他管理员都无法确定的原因,它的内存出现随机(非常突然)的爆炸。它变得没有响应,因为它耗尽了所有内存,然后我们必须重新启动它。很烦人。这是一个Debian系统,我们没有升级到Squeeze什么的,它已经完美稳定了很长一段时间。

问题是日志完全没用。他们似乎没有表明有什么问题。我猜测某些进程存在错误并占用了所有内存,但目前我无法证明这一点。远程日志记录没有任何帮助,因为它不会抱怨任何事情——它认为一切都很顺利。

所以我的问题是:你将如何解决这个问题?任何见解都值得赞赏。谢谢。

答案1

在顶上非常擅长监控和记录资源使用情况。它可以交互使用或作为服务使用;这Debian 软件包将其设置为每十分钟记录到 /var/log/atop.log (编辑 /etc/init.d/atop 以获得更精确的信息)。然后您可以使用atop -r /var/log/atop.log -b hh:mm -mM;重播日志。 mM 选择适合内存问题的视图和排序,hh:mm 应该是事件发生前几分钟,使用 tT 进行导航。也可以尝试 A 类。

答案2

您可以尝试通过 /etc/security/limits.conf (pam_limits) 组合限制每个进程的地址空间 (as) 和每个用户的进程数 (nproc),希望这将有助于避免您的机器完全无响应无论是什么导致了问题,都会大声地死掉(或者导致问题的人抱怨他们的东西不再工作),这样你就可以找出真正的原因。

答案3

第一步是监视内存使用情况。top可以做到这一点,但 Linux 版本设置起来很笨拙。制作top名为 的可执行文件的副本top-mem-chris。运行它并设置一些合理的参数,至少按内存使用情况排序(M)并仅显示前 N 个任务(n 15)。然后让它生成一个配置文件( W) ~/.top-mem-chrisrc。要进行监控,请运行top-mem-chris -b -d 5 >~/log/top-mem-mainserver.log.或者,也许可以尝试阿特萨尔,看起来合适,但除了描述之外我不知道。

答案4

如果机器上有一个真正的头脑(不太可能),请尝试让您友好的数据中心设施技术人员按下caps lock普通的直连键盘。如果 x86 处理器仍在处理中断,应该可以工作。如果这不起作用,机器可能会坏掉。我想存在一些极端情况,如熄灯卡、ip kvm、ps/2 与 usb 等。

检查通常的情况:可用磁盘空间、crons、邮件假脱机、rootkit 等。此外,我还见过损坏的硬件,即 PSU、mem、NFS/iSCSI/FC 中断,执行各种操作。 (提示:硬件自检几乎总是无用的。)

如果其他地方没有提到:

  • 周期性趋势sar
  • 磁盘IOiostat ALL -p ALL
  • 磁盘使用情况df -h
  • 网络活动iftop
  • 网络数据包sudo tcpdump
  • 内存free -lmt
  • 内存老化测试:内存测试86+
  • 增强顶部htop
  • 内核善良slabtop

顶部的更漂亮的钥匙:

  • 10 次更新/秒d0.1enter
  • 切换 SMP 视图1
  • 颜色切换z
  • 切换突出显示排序x
  • 切换突出显示正在运行的任务y
  • 按左下一列排序<(通常为shift+ ,
  • 按右下一列排序>(通常为shift+ .
  • 切换粗体排序shift+b
  • 切换粗体b
  • 切换排序 asc -> desc shift+r

如果合理预期的话,将重要目录分区到单独的安装点/ /tmp /var /var/log /var/tmp /var/spool /usr /usr/local /opt /home ...对于避免在未来某个时候关闭系统非常重要。

相关内容