2016-02-12 23 views
8

Ho un'app per rails in esecuzione su ubuntu 14.04 macchina ed è servita da Nginx e passenger. Ci sono momenti in cui l'applicazione va giù dando il seguente erroreCome gestire i passeggeri stantii che causano tempi di inattività

[ 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 

e l'applicazione rimane in basso a meno che il Nginx viene riavviato. Ciò è probabilmente dovuto agli operai stantii che non servono più e divorano la memoria (correggimi se sbaglio).

Ho impostato il max pool size del passeggero a 6 come istanza della mia app prendedi memoria con un 2GB RAM.

Stavo pensando di scrivere una sceneggiatura che controlli regolarmente gli operai stantii e, se trovata, riavvia il Nginx o fai un touch tmp/restart.txt. Voglio anche sapere come controllare gli operai stantii o se il passenger non funziona come previsto.

Un'altra soluzione che ho pensato è di riavviare regolarmente Nginx o fare un touch tmp/restart.txt dopo un intervallo regolare di tempo, diciamo un'ora.

Ho anche letto la documentazione dei passeggeri circa i tre modi di riavviare l'applicazione

  • passeggero-config-app restart

  • restart.txt

  • Riavvio Nginx

I primi due casi non saranno dro p eventuali richieste durante il riavvio dell'app ma potrebbero avere zero tempi morti durante il riavvio dell'app poiché il riavvio dell'app potrebbe richiedere del tempo a seconda dell'app.

Voglio sapere quale sarebbe un buon modo o c'è un altro modo per sbarazzarsi di questo problema.

risposta

0

In primo luogo, è necessario controllare veramente passenger configuration options. In secondo luogo, dovresti davvero capire che cosa effettivamente incombe al tuo passeggero. Per questo c'è un parametro log passeggero (che puoi monitorare), in quanto non sembra che tu sia abbastanza sicuro di ciò che sta accadendo in quei processi. :)

Ora per quanto riguarda il primo numero a portata di mano - il vostro desiderio di forzare lavoratore riavvia - se questo è in realtà dovuto al processo di appendere senza far nulla: è possibile combinare

passenger_min_instances 
passenger_max_instances 

con

passenger_pool_idle_time/passenger_max_requests 

Leggendo un po 'di questi comandi sul link indicato, si passa in maggiore dettaglio.