服务器每隔几天就会停止运行

服务器每隔几天就会停止运行

我有一台 Ubuntu 机器,大部分时间运行正常,但每隔几天就会发生以下两种情况之一:

  • 我将登录到计算机,并且每次尝试运行任何命令时都会收到“无法分配内存”消息
  • 我将尝试通过 SSH 连接到计算机,但会收到一条错误消息,提示“远程主机已关闭连接”

如果我登录到我的主机的 Web 界面并重新启动服务器,问题将完全消失,但它总会再次出现。

我不知道如何解决此问题。每次我这样做时top它看起来都很正常。有什么建议吗?

编辑:这是我的top输出(几天内,按内存使用情况排序):http://pastebin.com/x1CbFLrA

答案1

我同意 sybreon 的观点,这听起来像是内存泄漏。如果一台机器运行一段时间后,最终变得无法使用,并在重新启动后立即恢复正常,那么这几乎肯定是内存泄漏。

您发布的有关“无法分配内存”的错误消息也证实了这一点。

top 命令默认按 CPU 使用率对输出进行排序。在 top 中,点击按钮将按内存使用情况对输出进行排序。然后,留意 %MEM 列。如果您有一个进程泄漏内存,那么它最终会上升到顶部。

我还会留意“Mem:”行中的第 3 列,其中列出了机器上的可用内存。

答案2

听起来像是负载问题。服务器的规格是什么?负载是多少?

安装 Ganglia:http://ganglia.sourceforge.net/。这是我首选的负载故障排除工具。您一定会喜欢它。

启用并查看日志以获取更多线索。

答案3

那是一个非常小的盒子;它可能是 VPS 吗?如果是这样,那么这个盒子可能超额认购,即使你的机器认为还有可用内存,你也无法分配 RAM。

或者,基于:

在我检查了几分钟后top,发现占用内存最多的进程只使用了 8.4%,然后我又开始收到常规错误:-bash: fork: Cannot allocate memory

您可能MaxClients在 Apache 配置中设置得太高了。我在输出中看到的最大值top为 32M 左右;在 1GB VPS 上,这意味着 MaxClients 为 32 或更高可能会不安全*。

*:是的,在某些情况下,这种说法非常不准确。但这仍然是一个很好的经验法则。

相关内容