了解 Heroku 服务器状态 143

Understanding Heroku server status 143

提问人:Tien Nguyen 提问时间:4/2/2013 最后编辑:Choylton B. HigginbottomTien Nguyen 更新时间:8/12/2022 访问量:85141

问:

我想知道 Heroku 服务器状态,但找不到有关此主题的任何文档。

例:

Process exited with status 143

谁能解释这个例子?我在哪里可以找到资源以供将来参考?

Heroku 部署 服务器端

评论


答:

111赞 Eric Fode 4/3/2013 #1

退出代码 143 表示您的进程已被 SIGTERM 终止。这通常是在您执行任何需要 dynos 重新启动的命令时发送的(config:set、restart、scale down...

评论

3赞 Eric Fode 4/4/2013
不,一点也不差。这就是 heroku 告诉您的应用程序是时候关闭的方式。
3赞 Gautham Badhrinathan 8/24/2013
@EricFode 在哪里可以找到这些状态代码的参考?
2赞 Eric Fode 8/28/2013
@GauthamBadhrinathan 这些状态代码不是特定于 heroku 的,它们是在正在运行的任何应用程序的 man 文件中定义的。143 号出口和其他一些出口很特别,因为它们是由 Unix 内核标准化的。
5赞 Sean Dunford 8/18/2014
对我来说,这很令人困惑,因为我会运行 - Heroku 重新启动 - Heroku 日志 然后我的输出将显示我的程序输出和错误代码 AFTER。因此,看起来 heroku 正在缩小我的流程,而实际上它只是以我没想到的顺序登录。
1赞 Inzamam Malik 6/17/2017
是因为免费测功机吗?付钱给 heroku 会解决这个问题吗?因为@eric说“这就是 heroku 告诉你的应用程序是时候关闭了”和付费测功机不要睡觉
12赞 Pawan V 5/11/2018 #2

当它有一段时间没有收到任何请求时,它是一种空闲状态。当它收到请求时,它将再次启动。

8赞 Andriy Kryvtsun 9/11/2019 #3

每日重启是 Heroku dynos 生命周期的常规活动:

Heroku 自动测功机重启

评论

0赞 Hamid Shoja 8/12/2022
想知道问题是否与重新启动有关!?
0赞 Thasni Iqbal 11/27/2019 #4

重新启动测功机,这会导致测功机接收 SIGTERM。使用此命令

heroku restart worker.1

然后

heroku logs
4赞 wangwu jin 2/8/2021 #5

这是由于 heroku 应用程序被测功机停止。 因此,您必须重新定位应用程序。 您可以在终端中输入。 也heroku restartheroku restart --app application_name

4赞 Peter Parker 3/7/2022 #6

没有一个答案可以解决这个问题。获得“进程以状态 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 中的一个示例。

0赞 Hamid Shoja 8/12/2022 #7

当我检查日志时:

 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

https://stackoverflow.com/questions/5480337/easy-way-to-prevent-heroku-idling#:~:text=You%20can%20install%20the%20free,preventing%20the%20dyno%20from%20idling