代码之家  ›  专栏  ›  技术社区  ›  Tien Nguyen

了解Heroku服务器状态143

  •  107
  • Tien Nguyen  · 技术社区  · 13 年前

    我想知道Heroku服务器的状态,找不到任何关于这个主题的文档。

    例子:

    Process exited with status 143
    

    有人能解释这个例子吗?我在哪里可以找到未来参考的资源?

    7 回复  |  直到 11 年前
        1
  •  111
  •   Eric Fode    12 年前

    退出代码143表示您的进程被SIGTERM终止。这通常是在您执行任何需要重新启动dynos的命令时发送的(配置:设置、重新启动、缩小…)。

        2
  •  12
  •   Pawan V    8 年前

    当它在一段时间内没有收到任何请求时,它处于空闲状态。当它收到请求时,它将重新启动。

        3
  •  8
  •   Andriy Kryvtsun    7 年前

    每天重新启动是Heroku dynos生命周期中的一项定期活动:

    Heroku automatic dyno restarts

        4
  •  4
  •   wangwu jin    5 年前

    这是由于heroku应用程序被dyno停止。 所以你必须重新启动应用程序。 您可以键入 heroku restart 在终端中。 而且 heroku restart --app application_name

        5
  •  4
  •   Peter Parker    4 年前

    没有一个答案能解决这个问题。它是 绝对不是 很高兴得到“进程已退出,状态为143”。这是你的应用程序没有正确操作的迹象。

    看看这个 page 来自Heroku文档,特别是 重新启动 和 停机 .


    基本上,您的测功机可能重新启动的原因有很多。Heroku每24小时自动重新启动一次测功机(手动重新启动和部署将重置这24小时),但也可以出于其他原因重新启动测功机。

    重要的是要明白,它可以在任何给定的时间终止,你的应用程序需要考虑到这一点。例如,假设您有一个工作进程,它处理一些队列,从队列中弹出项目并对其进行一些处理。如果你弹出了项目,但应用程序终止,你无法完成工作,这不是很糟糕吗?或者你是否有一些代码行,如果应用程序在执行过程中停止,那可能会很糟糕?


    Heroku不仅仅是猛拉应用程序上的电源线;它发送一个SIGTERM信号。Heroku还说(在上面的链接中)忽略这个信号是个坏主意。如果您得到的是“进程已退出,状态为143”,这意味着您没有监听该信号(无论如何,对于python)。

    如果你没有在代码中做任何事情来监听这个信号,那么你就是在玩一个危险的游戏(除非你的应用程序在执行过程中的任何时候都可以被终止)。


    对于python应用程序,如果你没有利用SIGTERM信号,你的应用程序会立即终止(一旦Heroku发送该信号),你会得到一个“进程退出,状态为143”。不好的。

    然而,如果你利用了这个信号,那么你的应用程序在被终止之前有30秒的时间优雅地关闭,这是足够的时间来完成你正在做的任何工作。基本上停止做新的工作,如果你知道需要<30秒,或者将未完成的工作放回队列,然后退出,或者中断您所处的任何循环。您应该得到“进程已退出,状态为0”。这很好。

    此外,如果你确实进入了信号,但在30秒内没有退出,那么你会得到一个“错误R12(退出超时)->至少有一个进程未能在SIGTERM的30秒内退出”,应用程序会被SIGKILL终止。您会得到一个“进程已退出,状态为137”。也不好。

    在上面的链接中(在 停机 部分),他们在ruby中给出了一个如何利用该信号的例子。和 here 是python中的一个例子。

        6
  •  0
  •   Peyman Mohamadpour    6 年前

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

    heroku restart worker.1
    

    然后

    heroku logs
    
        7
  •  0
  •   Hamid Shoja    4 年前

    当我检查日志时:

     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
    

    它清楚地表明这是因为 Idling ,但如何防止这种情况发生。 当我打开带有URL的网络应用程序时,Dyno会再次启动该应用程序。 但在我的情况下,我在后台使用硒铬驱动程序,并且没有真正的用户。

    所以应该有一种方法每隔N分钟检查一次我的URL,以防止它关闭

    我发现了一个 New Relic APM 附加组件以及 http://kaffeine.herokuapp.com/ 在这个帖子上解决它

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

    推荐文章