我有一个在ubuntu 14.04
机器上运行的Rails应用程序,它由Nginx
和passenger
。 有些时候,应用程序停止给出以下错误
[ 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 size
为6
因为我的应用程序实例需要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
在给定的链接上阅读一些关于这些命令的内容,它会有更详细的介绍。