Phusion Passenger:使用OOB工作退出流程

时间:2019-03-27 23:00:54

标签: ruby-on-rails passenger

Phusion客运版本:5.0.29

我已经阅读了有关Passenger's OOB (Out-of-Band)功能的文档,并希望使用它对是否应该退出某个进程做出带外决策。如果必须退出流程,则在OOB工作结束时,流程将调用raise SystemExit

我们设法在流程退出的地方开始工作,然后旅客稍后启动了一个新流程来处理新的传入请求。但是,我们偶尔会在乘客日志中看到带有以下几行的502。

[ 2019-03-27 22:25:13.3855 31726/7f78b6c02700 age/Cor/Con/InternalUtils.cpp:112 ]: [Client 1-10] Sending
502 response: application did not send a complete response
[ 2019-03-27 22:25:13.3859 31726/7f78b6201700 age/Cor/CoreMain.cpp:819 ]: Checking whether to disconnect
long-running connections for process 10334, application agent
App 16402 stdout:
App 16441 stdout:
App 16464 stdout:
[ 2019-03-27 22:28:05.0320 31726/7f78ba9ff700 age/Cor/App/Poo/AnalyticsCollection.cpp:102 ]: Process (pid=16365, group=agent) no longer exists! Detaching it from the pool.

以上行为是否是由于请求处理程序将请求转发到流程与流程退出之间的竞争状况造成的?乘客是否设计来应对这种情况?任何解决此问题的方法/解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

好像我们需要运行“ passenger-config detach-process [PID]”才能正常终止。

  

改进的流程终止机制

     

如果您希望终止特定的应用程序进程(可能是因为其行为不正常),则可以通过使用kill命令将其杀死来简单地做到这一点。不幸的是,这种方法有一些缺点:

     

任何正在处理的请求都将被强行中止,从而导致错误响应返回给客户端。   在很短的时间内,新的请求可能会路由到该进程。这些请求将收到错误响应。   在Passenger 5中,我们引入了一种新的,优雅的机制来终止应用程序进程:passenger-config detach-process。此命令从负载平衡列表中删除该进程,清空所有现有请求,然后干净地终止它。

     

您可以通过运行以下内容进一步了解此工具:

     

passenger-config分离过程--help

来源:https://blog.phusion.nl/2015/03/04/whats-new-in-passenger-5-part-2-better-logging-better-restarting-better-websockets-and-more/