我的Heroku Rails应用程序中的Sidekiq后台作业遭受巨大的持续内存泄漏(900mb或更高)。这些任务运行后,这些内存泄漏仍然存在于我的工作者Dynos中,导致它们在我的工作室dyno中触发许多R14甚至R15错误,除非我或Heroku重启我的工作器dyno(例如24小时后)。
一个有助于减少这些内存泄漏影响的解决方案是将我们的rake任务转移到Heroku调度程序,在那里我们可以从Heroku利用他们自己独立的内存和进程来完成每个dino在再次旋转之前为我们工作。对于计划任务,这给我们提供了很大的喘息空间来隔离这些内存泄漏的影响,因为每个内存泄漏都不会影响其他人。
但是,我们的许多内存密集型后台作业无法移动到Heroku调度程序,因为它们是由人们在我们的应用程序中执行的操作而触发的。
如何将应用程序触发的后台作业移至Heroku One-Off Dynos?
答案 0 :(得分:1)
实现IHMO的最佳方法是使用Heroku API。这种方法有很多优点:
以下是来自文档的示例请求(缺少身份验证令牌):
curl -n -X POST https://api.heroku.com/apps/$APP_ID_OR_NAME/dynos \
-d '{
"attach": true,
"command": "bash",
"env": {
"COLUMNS": "80",
"LINES": "24"
},
"force_no_tty": null,
"size": "standard-1X",
"type": "run",
"time_to_live": 1800
}' \
-H "Content-Type: application/json" \
-H "Accept: application/vnd.heroku+json; version=3"
一个可能的缺点是您需要通过ENV变量将身份验证令牌传递给您的应用程序,但我认为没有其他方法。使用不同的解决方案,您仍然必须通过身份验证令牌。