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



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

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

  1. 这是正确的方法吗?
  2. 如果是这样,我应该添加什么代码或配置到项目中以使其停止提前终止?
  3. 如果没有,我如何在AWS或更普遍的云上顺利运行12小时以上的模拟?

添加信息谢谢你的反馈,Rohit。为了提供更多的信息,我使用Python和Flask。

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

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

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

如果我能提供更多的信息,请告诉我。我真的很感谢你的帮助:)

在和一个比我更了解这些东西的朋友交谈后,我解决了这个问题。虽然有点粗糙,但还是完成了任务。以下是我所做的概述,以供将来参考:

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

继续执行

2)借了一个漂亮的/etc/init.D/template将我的脚本作为守护进程运行(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花时间帮助我。我很高兴我仍然使用Amazon,即使Elastic Beanstalk不是适合这项工作的工具

从你的问题来看,你似乎遇到了启动超时,因为在启动期间运行在你的实例上的一些命令需要30多分钟。如本文所述,您可以调整aws:elasticbeanstalk:command名称空间中的Timeout选项。它的值可以在1到1800之间。这意味着如果您的命令在30分钟内完成,您将不会看到此错误。命令最终可能会像错误消息所说的那样结束,但是由于Elastic Beanstalk在指定的时间内没有收到响应,因此它不知道实例上发生了什么。

如果你能添加更多关于你的用例的细节将会很有帮助。在启动过程中运行了哪些命令?显然,您正在使用ebeextensions来启动需要很长时间的命令。是否可以在后台运行这些命令,或者是否需要在服务器启动期间运行这些命令?

如果你正在运行一个Tomcat web应用程序,你也可以使用servlet init方法来运行应用程序的引导代码。此代码可能需要花费多少时间而不会给您这个错误消息。

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

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

对于那些希望运行工作少于10小时的人来说,需要提到的是,当前的非活动超时限制是36000秒,所以正好是10小时,而不是30分钟,就像在网上所有的帖子中提到的那样(这让我认为需要一个像上面描述的解决方案)。

查看文档:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html

一篇很好的文章可以在这里找到:https://dev.to/rizasaputra/understanding-aws-elastic-beanstalk-worker-timeout-42hi

最新更新