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

时间:2014-07-01 07:51:56

标签: amazon-web-services elastic-beanstalk

我正在尝试使用Amazon Elastic Beanstalk运行一个非常长的数值模拟 - 最多20个小时。当我告诉它进行短暂的20秒模拟时,代码可以很好地工作。但是,当运行较长的一个时,我收到错误“以下实例在允许的命令超时时间内没有响应(它们可能最终仍然自己完成)”。

在浏览网页后,在我看来问题是Elastic Beanstalk允许工作进程最多运行30分钟,然后它们超时,因为实例没有响应(即完成模拟)。一些人提出的解决方案是每隔30秒左右发送一条消息“ping”Elastic Beanstalk,让它知道模拟进展顺利,所以它不会超时,这将让我运行一个很长的工作进程。所以我有几个问题:

  1. 这是正确的方法吗?
  2. 如果是这样,我会在项目中添加哪些代码或配置以使其尽早停止?
  3. 如果没有,我怎样才能顺利地在AWS上运行12小时以上的模拟,或者更普遍的是云?
  4. 添加信息 谢谢你的反馈,Rohit。为了提供更多信息,我正在使用带有Flask的Python。

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

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

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

    如果我能提供更多信息,请与我们联系。我真的很感激帮助:)

4 个答案:

答案 0 :(得分: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不适合这份工作

答案 1 :(得分:1)

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

如果您可以添加有关您的用例的更多详细信息,将会很有帮助。启动时运行的命令是什么?显然,您正在使用ebextensions来启动需要很长时间的命令。是否可以在后台运行这些命令,或者您是否需要在服务器启动期间运行这些命令?

如果您正在运行Tomcat Web应用程序,您还可以使用servlet init方法来运行应用程序引导代码。这段代码可能需要很长时间,而不会给你这个错误信息。

答案 2 :(得分:1)

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

正确的方法:我不知道。但是,我建议采用另一种方法,即从队列中获取消息,分离线程或进程以运行长时间运行的模拟,然后删除消息(表示成功处理)。在这种方法中,要注意在一台机器上剥离太多线程,并且在模拟结束之前要小心关闭机器,因为队列消息已被删除。
最后的说明:你的问题措辞极其详尽,并且足够详细:)

答案 3 :(得分:0)

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

查看文档:{​​{3}}

可以在这里找到非常好的文章:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html