如何pipe理造成停工的旅客陈旧工人

我有一个在ubuntu 14.04机器上运行的Rails应用程序,它由Nginxpassenger 。 有些时候,应用程序停止给出以下错误

 [ agents/LoggingAgent/Main.cpp:338 ]: Signal received. Gracefully shutting down... (send signal 2 more time(s) to force shutdown) [ agents/LoggingAgent/Main.cpp:400 ]: Received command to shutdown gracefully. Waiting until all clients have disconnected... [ ServerKit/Server.h:453 ]: [LoggerAdminServer] Shutdown finished [ agents/LoggingAgent/Main.cpp:425 ]: PassengerAgent logger shutdown finished [ ServerKit/Server.h:453 ]: [ServerThr.1] Shutdown finished [ ServerKit/Server.h:453 ]: [ServerThr.2] Shutdown finished [ ServerKit/Server.h:453 ]: [AdminServer] Shutdown finished [ agents/HelperAgent/Main.cpp:724 ]: Disconnecting long-running connections for process 19431, application /public#default [ agents/HelperAgent/Main.cpp:724 ]: Disconnecting long-running connections for process 19440, application /public#default [ agents/Watchdog/Main.cpp:1255 ]: Starting PassengerAgent watchdog... [ agents/HelperAgent/Main.cpp:883 ]: Starting PassengerAgent server... [ agents/HelperAgent/Main.cpp:232 ]: PassengerAgent server running in multi-application mode. [ agents/HelperAgent/Main.cpp:637 ]: PassengerAgent server online, PID 19637 [ agents/LoggingAgent/Main.cpp:431 ]: Starting PassengerAgent logger... [ agents/LoggingAgent/Main.cpp:312 ]: PassengerAgent logger online, PID 19645 [ agents/HelperAgent/Main.cpp:868 ]: PassengerAgent server shutdown finished 

除非Nginx重启,否则应用程序将保持closures状态。 这可能是因为那些不在服役的陈旧工人,而且吃掉了记忆(如果我错了,就纠正我)。

我已经设置乘客的max pool size6因为我的应用程序实例需要2GB RAM的内存150-200 Mb

我想写一个脚本,定期检查过时的工人,如果发现重新启动Nginx或做touch tmp/restart.txt 。 我也想知道如何检查陈旧的工人,或者如果passenger没有按预期工作。

另一种解决办法是定期重新启动Nginx或者在一段时间(例如一个小时)后touch tmp/restart.txt

我也读了关于重新启动应用程序的三种方式的乘客文档

  • 乘客configuration重新启动应用程序

  • restart.txt

  • 重新启动Nginx

前两种情况在重新启动应用程序时不会丢失任何请求,但在重新启动应用程序时可能没有停机时间,因为重新启动应用程序可能需要一些时间,具体取决于应用程序。

我想知道哪一个是一个好方法,或者有什么其他方法来摆脱这个问题。

首先你应该检查一下乘客的配置选项 ,其次你应该知道什么实际上挂在你的乘客上,因为有一个乘客日志参数(你可以监控的),因为你似乎并不确定什么是在这些进程中继续:)

现在关于手头的第一个问题 – 你希望强迫员工重新启动,如果这实际上是由于流程处理而不做任何事情:你可以合并

 passenger_min_instances passenger_max_instances 

 passenger_pool_idle_time / passenger_max_requests 

在给定的链接上阅读一些关于这些命令的内容,它会有更详细的介绍。