gpt4 book ai didi

ruby - 服务器定期无响应,OOM Killer 不活动?

转载 作者:IT老高 更新时间:2023-10-28 21:21:05 31 4
gpt4 key购买 nike

我在 AWS 上的 docker 容器中托管一个 Ruby 应用程序。不幸的是,众所周知,这个 Ruby 应用程序会泄漏内存,因此最终它会消耗所有可用内存。

我也许天真地期待 OOM killer 被调用并杀死 Ruby 进程,但没有任何反应。最终机器变得无响应(Web 服务器没有响应,ssh 被禁用)。我们从 AWS 控制台强制重启机器,并在日志消息中得到以下内容,因此在重启时它确实是事件的:

Apr 30 23:07:14 ip-10-0-10-24 init: serial (ttyS0) main process (2947) killed by TERM signal

我不认为这是 AWS 中的资源枯竭(即信用不足)。如果我定期重新启动应用程序,服务器永远不会关闭。

  • 我没有禁用 OOM Killer 或更改任何 default docker memory config .
  • 我正在运行库存 Amazon Linux AMI 版本 2017.03 内核。
  • 此行为发生在 AWS 中的多个虚拟实例中

我在这里很茫然;为什么内存压力会导致机器锁定?

最佳答案

显然我提供的解决方案似乎对提出问题的人没有帮助,但它可能会帮助其他偶然发现这里的人。以下是我建议的可能导致问题的 2 件事。

建议 1

我猜你正在使用官方的 ruby​​ docker 镜像,当你运行容器时,ruby 在容器内以 PID 1 运行。

如果 ruby​​ 作为 PID 1 运行,那么 OOM killer 将无法杀死它,从而导致您看到的所有问题。

要解决这个问题,您必须确保正确的 init 进程以 PID 1 运行。

Docker 1.25 及更高版本为 docker run 命令提供了 --init 选项。此选项将确保正确的 init 处理 PID 1 的任务,它还将所有信号传递给您的 ruby​​ 应用程序。

https://docs.docker.com/engine/reference/commandline/run/

--init API 1.25+ Run an init inside the container that forwards signals and reaps processes

以下是 docker 使用的 init https://github.com/krallin/tini

建议 2

Amazon Linux AMI 存在一个已知问题,可在以下链接中找到详细信息 https://github.com/aws/amazon-ecs-agent/issues/794 .在撰写本文时,我不确定 AMI 的问题是否已解决。

因此,请按照该线程中的建议尝试不同的 AMI,比如 Ubuntu AMI。

关于ruby - 服务器定期无响应,OOM Killer 不活动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50119863/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com