AWS Elastic Beanstalk Worker在长时间计算期间处于不活动状态后超时

问题描述 投票:5回答:4

我正在尝试使用Amazon Elastic Beanstalk运行非常长的数值模拟-长达20小时。当我告诉它执行一个简短的20秒仿真时,该代码可以很好地工作。但是,当运行更长的实例时,出现错误“以下实例在允许的命令超时时间内未响应(它们最终可能仍会自行完成)”。

浏览网络后,在我看来,问题是Elastic Beanstalk最多允许工作进程运行30分钟,然后由于实例未响应(即完成模拟)而使它们超时。有人提出的解决方案是每30秒发送一次消息,以便“ ping” Elastic Beanstalk,让它知道模拟进行得很好,因此不会超时,这将使我运行一个较长的工作进程。所以我有几个问题:

  1. 这是正确的方法吗?
  2. 如果是这样,我将向项目添加什么代码或配置以使其尽早终止?
  3. 如果没有,如何在AWS或更普遍的云上平稳运行12小时以上的模拟?

添加信息谢谢您的反馈,罗希特。为了提供更多信息,我将Python与Flask一起使用。

•我的确在使用带有SQS队列的Elastic Beanstalk工作者层

•在我的代码中,我正在模拟可变长度-从短至20秒到长至20小时。 Elastic Beanstalk所做的99%的工作都在运行模拟。其他1%涉及保存结果,发送电子邮件等。

•模拟本身涉及使用生成许多随机数并处理我定义的对象。我在这里大量使用numpy。

让我知道是否能提供更多信息。我非常感谢您的帮助:)

amazon-web-services amazon-elastic-beanstalk
4个回答
2
投票

[与一个比我更了解这方面知识的朋友交谈后,我解决了这个问题。有点粗略,但是完成了工作。供以后参考,以下是我所做的概述:

1)编写了一个主要脚本,该脚本使用了Amazon的boto库连接到我的SQS队列。编写了一个无限的while循环,每60秒轮询一次队列。当队列中有消息时,请运行模拟,然后继续执行循环

2)借用了漂亮的/etc/init.d/模板以将我的脚本作为守护程序(http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/)]运行>

3)使我的主脚本和(2)中的脚本可执行

4)设置cron作业,以确保脚本在失败时可以启动。

再次,感谢罗希特(Rohit)花时间帮助我。我很高兴,即使Elastic Beanstalk并不是适合该工作的工具,我仍然可以使用Amazon


1
投票

从您的问题来看,您似乎正在遇到启动超时的问题,因为在您的实例上运行的某些启动过程中的命令需要30分钟以上的时间。如here所述,您可以在Timeout名称空间中调整aws:elasticbeanstalk:command选项。它的值可以在1到1800之间。这意味着,如果您的命令在30分钟内完成,则不会看到此错误。该命令最终可能会按照错误消息中的说明完成,但是由于Elastic Beanstalk在指定的时间内未收到响应,因此它不知道实例的运行情况。


1
投票

[遗憾的是,没有超过12小时的时间无法从SQS队列“处理消息”(请参见ChangeVisibilityTimeout的说明)。在这种情况下,这种方法不太适合您的应用程序。我遇到了同样的问题。


0
投票

对于那些希望运行少于10个小时的工作的人,需要指出的是,当前的不活动超时限制为36000秒,因此恰好是10个小时而不是30分钟,就像网络上所有帖子中提到的那样(导致我认为需要上述解决方法)。

© www.soinside.com 2019 - 2024. All rights reserved.