4

刚拿到上个月的heroku账单,预定的rake任务负担比较重。我们还处于开发过程的早期阶段,所以我们只是开发了一些 rake 任务来完成最近的工作,并没有过多关注他们的优化。

现在我们想提高他们的性能和他们的 heroku 处理时间使用情况。我们使用 New Relic 来监控 webapp 的性能,但显然这种类型的 rake 任务默认被忽略,并且不清楚如何覆盖它。

有人有类似的问题吗?如何近乎实时地跟踪计划任务以监控性能、优化并避免意外账单?

4

5 回答 5

7

虽然您不能真正很好地监控 rake 任务,但您可以做一些小事情。一种是使用日志记录。将任务的开始和结束时间输出到日志中,然后您可以查看持续时间发生的事情。如果你将它与 Papertrail 插件之类的东西结合起来,那么你以后可以进行额外的询问。

至于自己运行作业,有几种方法可以运行后台进程,具体取决于它们需要如何运行:

如果您需要按计划运行作业,有几个选项可用。首先是 Heroku 调度程序,它非常好,但不能保证会发生执行。通常,您会使用它来启动 rake 任务,这将在任务期间产生一次性的测功机 - 因此您需要在开发中确保这些任务尽可能高效。

或者,如果您正在寻找需要更多控制或使用时钟进程的工作。从本质上讲,这是一个 24/7 运行的测功机,除了以预设的时间间隔和时间启动其他工作之外什么都不做。这通常使用发条宝石来完成。这种方法的缺点是您需要一直为时钟进程付费。

第三种方法,一种可能有效的方法是延迟作业,它的runat选项允许您将作业排队以在将来运行(并且作业可以自己重新排队)。这样做有一些问题,因为失败可能会杀死整个链条,并且您需要一个全职工作人员来运行它们来处理它们。

因此,为了最大限度地减少您的账单,请确保您的 rake 任务具有同样的性能和可靠性,然后选择适合您的调度选项。如果您正在查看时间表和用户创建的事件,那么延迟作业可能是最佳选择。如果您正在查看一些定期运行的任务,请使用调度程序。如果您正在考虑定期运行大量时间紧迫的工作,请使用发条。

无论哪种方式,您都应该能够根据您的方法将相当数量的处理限制为一个或两个进程。

于 2012-02-05T13:11:19.107 回答
1

我知道这个问题已经有将近 10 年的历史了,但是有一种新方法!

您现在可以使用一次性 Dyno Metrics监控您的 Heroku Scheduler 作业。这个 Heroku 插件会收集在您的 Heroku 应用程序中运行的所有分离的一次性测功机的指标。它被创建为 Heroku 应用程序指标的扩展,并且开箱即用。

于 2021-11-25T20:54:07.400 回答
0

您可以强制 New Relic 代理启动您的 rake 任务并报告其性能数据。

于 2012-02-05T18:47:14.770 回答
0

不是特定问题的答案,但是......减少开销的一种方法是使用 Unicorn 服务器让多个工作人员在一个测功机上工作。这取决于您的设置,但大多数花时间测试它的人可以轻松地让 3 - 4 个工作进程同时运行。这是清除线索或任务的巨大推动力。请注意不要最大化为测功机分配的内存。

于 2012-02-26T01:08:40.080 回答
0

当您在 heroku cedar 上运行时,有一种方法可以为您的工作人员免费设置。这不是您的监控问题的答案,但无论如何它可能很有趣:http: //blog.nofail.de/2011/07/heroku-cedar-background-jobs-for-free/

于 2012-02-05T14:39:06.127 回答