提问人:Tien Nguyen 提问时间:4/2/2013 最后编辑:Choylton B. HigginbottomTien Nguyen 更新时间:8/12/2022 访问量:85141
了解 Heroku 服务器状态 143
Understanding Heroku server status 143
问:
我想知道 Heroku 服务器状态,但找不到有关此主题的任何文档。
例:
Process exited with status 143
谁能解释这个例子?我在哪里可以找到资源以供将来参考?
答:
退出代码 143 表示您的进程已被 SIGTERM 终止。这通常是在您执行任何需要 dynos 重新启动的命令时发送的(config:set、restart、scale down...
评论
当它有一段时间没有收到任何请求时,它是一种空闲状态。当它收到请求时,它将再次启动。
每日重启是 Heroku dynos 生命周期的常规活动:
评论
重新启动测功机,这会导致测功机接收 SIGTERM。使用此命令
heroku restart worker.1
然后
heroku logs
这是由于 heroku 应用程序被测功机停止。
因此,您必须重新定位应用程序。
您可以在终端中输入。
也heroku restart
heroku restart --app application_name
没有一个答案可以解决这个问题。获得“进程以状态 143 退出”绝对不好。这表明您的应用执行操作不正确。
从 Heroku 文档中查看此页面,特别是有关重新启动和关闭的部分。
基本上,您的测功机可能重新启动的原因有很多。Heroku 确实每 24 小时自动重启一次测功机(手动重启和部署将重置这 24 小时),但它也可以出于其他原因重新启动测功机。
请务必了解,它可以在任何给定时间终止,并且您的应用在设计时需要考虑到这一点。例如,假设您有一个工作进程,它处理某个队列,从队列中弹出项目并对其执行一些工作。如果您弹出了项目,但随后应用程序终止并且您无法完成工作,那不是很糟糕吗?或者您是否有一些代码行,如果应用程序在执行过程中停止可能会很糟糕?
Heroku 不只是拉扯您应用程序上的电源线;它发送一个 SIGTERM 信号。Heroku 还说(在上面的链接中)忽略该信号是个坏主意。如果您收到“进程退出状态为 143”,则意味着您没有监听该信号(无论如何对于 python)。
如果你没有在代码中做任何事情来侦听这个信号,那么你就是在玩一个危险的游戏(除非你的应用在执行过程中的任何时候都可以终止)。
对于 python 应用程序,如果您不利用 SIGTERM 信号,您的应用程序将立即终止(一旦 Heroku 发送该信号),并且您会得到一个“进程退出,状态为 143”。不好。
但是,如果您点击该信号,则您的应用程序将在终止之前有 30 秒的时间正常关闭,这有足够的时间完成您正在执行的任何工作。基本上停止做新工作,如果你知道这需要 <30 秒,就完成你正在做的事情,或者把未完成的工作放回队列中,然后退出,或者打破你所处的任何循环。您应该得到“进程已退出,状态为 0”。很好。
此外,如果您确实接入了信号,但在 30 秒内没有退出,那么您会收到“错误 R12(退出超时)->至少一个进程未能在 SIGTERM 的 30 秒内退出”,并且应用程序以 SIGKILL 终止。您会收到“进程已退出,状态为 137”。也不好。
在上面的链接中(在关闭部分),他们用 ruby 给出了一个如何利用该信号的示例。这是 python 中的一个示例。
当我检查日志时:
heroku[web.1]: Idling
heroku[web.1]: State changed from up to down
heroku[web.1]: Stopping all processes with SIGTERM
heroku[web.1]: Process exited with status 143
它清楚地说这是因为,但如何防止这种情况发生。
当我使用 URL 打开 Web 应用程序时,Dyno 会再次启动该应用程序。
但就我而言,我在后台使用 selenium chrome 驱动程序,没有真正的用户。Idling
所以应该有一种方法可以每 N 分钟检查一次我的 URL 以防止它关闭
我找到了一个附加组件,也 http://kaffeine.herokuapp.com/ 在这篇文章中解决它New Relic APM
上一个:版权日期需要更新吗?[已结束]
下一个:服务器发送的事件与轮询
评论