工作进程休眠/空闲 - Heroku 免费套餐

12

Heroku的一个工作器Dyno(在Python环境中运行)在30分钟后会进入睡眠状态。该工作器执行Celery周期任务计划以向用户发送电子邮件。

这里是显示实际行为的日志:

2019-05-29T12:49:02.273852+00:00 heroku[web.1]: Idling
2019-05-29T12:49:02.278946+00:00 heroku[web.1]: State changed from up to down
2019-05-29T12:49:02.288616+00:00 heroku[worker.1]: Idling
2019-05-29T12:49:02.306209+00:00 heroku[worker.1]: State changed from up to down
2019-05-29T12:49:03.087205+00:00 heroku[worker.1]: Stopping all processes with SIGTERM
2019-05-29T12:49:03.101608+00:00 app[worker.1]:
2019-05-29T12:49:03.101688+00:00 app[worker.1]: worker: Warm shutdown (MainProcess)
2019-05-29T12:49:03.185191+00:00 app[worker.1]: [2019-05-29 12:49:03,184: INFO/MainProcess] beat: Shutting down...
2019-05-29T12:49:03.297659+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2019-05-29T12:49:03.324661+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [4] [INFO] Handling signal: term
2019-05-29T12:49:03.326185+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [11] [INFO] Worker exiting (pid: 11)
2019-05-29T12:49:03.326993+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [10] [INFO] Worker exiting (pid: 10)
2019-05-29T12:49:03.626898+00:00 app[web.1]: [2019-05-29 12:49:03 +0000] [4] [INFO] Shutting down: Master
2019-05-29T12:49:03.758456+00:00 heroku[web.1]: Process exited with status 0
2019-05-29T12:49:04.817520+00:00 heroku[worker.1]: Process exited with status 0

根据研究,我理解 web dyno 会休眠,但 worker dyno 不会休眠。https://devcenter.heroku.com/articles/free-dyno-hours

Web:

如果一个应用有一个免费的 web dyno,在30分钟内没有收到 web 流量,它将会休眠。

警告:Worker dynos 不会休眠,因为它们不会响应 Web 请求。请注意此点,因为它们可能会运行24/7并消耗您的小时数。

我希望 web 在空闲时(平均 250 小时) + worker 运行 Celery beat 的全天候使用(750 小时)可以满足我的需求,以在套餐范围内。

目前我已经启用了:https://uptimerobot.com/ 来定期每五分钟 ping web dyno 以使其保持唤醒状态,但小时数不足以维持一个整月。使用这种方法,两个 dynos 看起来都是唤醒状态。

你有什么想法为什么会发生这样的情况吗?有什么解决方案?


我在我的免费dynos上也遇到了同样的问题。我想我要升级到hobby。我猜这会解决这个问题。正如你所说,警告信息是误导性的,因为工作程序(在免费层上)的行为与文档不匹配。 - Julien
1个回答

4

目前,您的两个程序都在使用您账户上的共享“小时池”中的时间。如果您每5分钟让uptime robot检测您的网络动力和您的工人动力一直开着24/7,即使您已经保存了信用卡,您也无法免费全天候运行它们。如果您不断地ping它,那么Web dyno就不会处于空闲状态。

我不完全确定您从何得出250小时的数字,但如果您想并排运行这些程序,您必须让其中一个dynos处于休眠状态。由于uptime robot,现在这种情况并没有发生,所以您可能正在尝试每个月使用1460/1000 dyno小时,并且导致dynos被关闭。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接