2016-02-12 44 views
8

我有一臺運行在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是該應用遺存下來。這可能是由於陳舊的工人不再服用和吃掉記憶(如果我錯了,糾正我)。

我已經將乘客的max pool size設置爲6,因爲我的應用程序實例需要150-200 Mb的存儲空間,並配有2GB RAM

我想寫一個腳本,定期檢查過時的工人,如果發現重新啓動Nginx或做一個touch tmp/restart.txt。我也想知道如何檢查陳舊的工人,或者如果passenger未按預期工作。

我認爲的另一個解決方案是定期重新啓動Nginx或在規定的時間間隔(例如1小時)後執行touch tmp/restart.txt

我也看到乘客文檔有關重新啓動應用程序

  • 乘客配置重啓應用

  • restart.txt

  • 重啓Nginx的

  • 的三種方式

前兩種情況不會出現p重新啓動應用程序時的任何請求,但在重新啓動應用程序時可能沒有停機時間,因爲重新啓動應用程序可能需要一些時間,具體取決於應用程序。

我想知道哪個是一個好方法,或者有沒有其他辦法可以擺脫這個問題。

回答

0

首先,你應該檢查passenger configuration options。其次,你應該真正弄清楚究竟是什麼掛在你的乘客上。爲此,有一個乘客日誌參數(您可以監控),因爲您似乎無法確定這些流程中發生了什麼。 :)

現在就手頭的第一個問題 - 你想強迫工人重新開始 - 如果這實際上是由於處理而什麼都不做吊:您可以將

passenger_min_instances 
passenger_max_instances 

passenger_pool_idle_time/passenger_max_requests 

在給定的鏈接上閱讀一些關於這些命令的內容,會更詳細地介紹。