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

问题描述 投票:0回答:1

Phusion Passenger版本:5.0.29

我已经阅读了有关Passenger's OOB (Out-of-Band)功能的文档,并希望用它来决定进程是否应该退出。如果进程必须退出,那么在OOB工作结束时,进程调用raise SystemExit

我们已经设法让这个进程在进程退出的地方运行,然后Passenger在稍后处理新进程以处理新的传入请求。但是,我们偶尔会看到乘客日志中有以下502行的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.

上述行为是由于请求处理程序将请求转发到进程和进程退出之间的竞争条件造成的吗? Passenger是否设计用于处理这种情况?解决此问题的任何解决方法/解决方案?

谢谢!

ruby-on-rails passenger
1个回答
0
投票

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

改进了流程终止机制

如果您希望终止特定的应用程序进程 - 可能是因为它行为不当 - 那么您只需使用kill命令将其杀死即可。不幸的是,这种方法有一些缺点:

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

您可以通过运行以下方式了解有关此工具的更

passenger-config detach-process --help

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

© www.soinside.com 2019 - 2024. All rights reserved.