2016-02-12 9 views
8

Ich habe eine Rails-App, die unter ubuntu 14.04 ausgeführt wird und von Nginx und passenger bedient wird. Es gibt Zeiten, wenn die Anwendung die folgenden Fehler geben gehtSo verwalten Sie veraltete Mitarbeiter, die zu Ausfallzeiten führen

[ 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 

Und die App bleibt nach unten, wenn die Nginx neu gestartet wird. Dies ist wahrscheinlich auf die abgestandenen Arbeiter zurückzuführen, die nicht mehr dienen und die Erinnerung auffressen (korrigiere mich, wenn ich falsch liege).

Ich habe die max pool size von Beifahrer auf 6 als meine App Instanz 150-200 Mb des Speichers mit einer 2GB RAM gesetzt.

Ich dachte daran, ein Skript zu schreiben, das regelmäßig nach den abgestandenen Arbeitern sucht und, falls gefunden, starte die Nginx neu oder mache eine touch tmp/restart.txt. Ich möchte auch wissen, wie man nach veralteten Arbeitern sucht oder ob die passenger nicht wie erwartet funktioniert.

Eine andere Lösung, die ich dachte, ist regelmäßig Nginx neu zu starten oder eine touch tmp/restart.txt nach einem regelmäßigen Zeitintervall, sagen wir eine Stunde.

Ich habe auch die Passagier Dokumentation über die drei Möglichkeiten, einen Neustart des App

  • Passagier-config Neustart-App

  • restart.txt

  • Neustarten Nginx

Die ersten beiden Fälle werden nicht dro p jede Anfrage während des Neustarts der App, aber möglicherweise keine Stillstandszeit während des Neustarts der App, da der Neustart der App abhängig von der App einige Zeit dauern kann.

Ich möchte wissen, was ein guter Weg wäre oder gibt es eine andere Möglichkeit, dieses Problem loszuwerden.

Antwort

0

Zuerst sollten Sie wirklich überprüfen passenger configuration options. Zweitens sollten Sie wirklich herausfinden, was tatsächlich Ihr Passagierarbeiter hängt. Dafür gibt es einen Passagier-Log-Parameter (den Sie überwachen können), da Sie nicht sicher sind, was in diesen Prozessen passiert. :)

nun die erste Frage auf der Hand in Bezug auf - Ihr Wunsch Arbeiter zu zwingen, neu startet - wenn das tatsächlich fällig hängen zu verarbeiten, während nichts zu tun: Sie

passenger_min_instances 
passenger_max_instances 

mit

passenger_pool_idle_time/passenger_max_requests 

kombinieren Lesen Sie etwas über diese Befehle auf dem gegebenen Link, es geht ausführlicher.