Rjb+passenger problemi

Salve a tutti, premetto che sono alle prime armi con passenger e apache,
giusto le basi per mettere rails in produzione.

La app che ho messo in produzione è in un server interno. Premetto che
funziona tutto bene, ho riscontrato un problema strano (in locale questo
problema non viene riscontrato):

Effettuo diverse connessioni a un db as400 e faccio delle ‘select’ con
diversi campi, ottengo un resulset dopo di che lo inserisco in un array
(campo per campo).

Utilizzo una ‘action’ diversa (dentro un controller) per ogni
importazione (una action, una connessione, un resulset).

Con le importazioni che hanno pochi campi e un resulset di al massimo
9000 record non ho riscontrato problemi, ottengo l’array con i dati e la
pagina si ridireziona senza problemi.

Con l’importazione di una tabella dove devo fare una ‘select’ con 13
campi e si ottiene un resulset di piu di 11000 record, la applicazione
va in loop (praticamente resta la pagina in caricamento, la rotellina
del browser girando e non si ridireziona la pagina).
I log di passenger non danno nessun errore (dice solo che ci sono dei
processi non chiusi in coda, di killarli manualmente)
I log in log/production.rb non danno nessun errore (completed 200ok)

Ho fatto tantissime prove, caricando i dati in batch (500 alla volta),
comunque dopo un tot di batch succede la stessa identica cosa.
Ho provato a diminuire la quantita di colonne interrogate, con 3 o 4 la
pagina si ridireziona senza problemi, ma io ho bisogno di tutti i valori
dei 13 campi della tabella. Ho provato a interrogare 3 campi alla volta
in varie select diverse, ma dopo la seconda ‘select’ va di nuovo in loop
e la pagina non si ridireziona.

Non vorrei fosse un problema di memoria???, di passenger???, bisogna
configurare in un modo particolare passenger???

Aiutatemi per favore, grazie

On 12/04/2013 09:23 AM, ste lab wrote:

I log di passenger non danno nessun errore (dice solo che ci sono dei
processi non chiusi in coda, di killarli manualmente)
I log in log/production.rb non danno nessun errore (completed 200ok)

Sintomo che probabilmente Passenger ha esaurito la memoria, Apache ha
raggiunto il numero di MaxClients, oppure che la quota disco assegnata
all’app esaurita. Qual l’errore esatto nel log?

FS.

Fabrizio S. wrote in post #1129515:

On 12/04/2013 09:23 AM, ste lab wrote:

I log di passenger non danno nessun errore (dice solo che ci sono dei
processi non chiusi in coda, di killarli manualmente)
I log in log/production.rb non danno nessun errore (completed 200ok)

Sintomo che probabilmente Passenger ha esaurito la memoria, Apache ha
raggiunto il numero di MaxClients, oppure che la quota disco assegnata
all’app esaurita. Qual l’errore esatto nel log?

FS.

Grazie della risposta, nel log non esce un errore, si ferma li senza
fare niente

Pool2/Implementation.cpp:xxxx ]: [App xxxxx stdout]

Se riavvio la pagina manualmente nel browser, dopo esce un messaggio nel
log di passenger:

Some Phusion Passenger agent processes did not exit in time, forcefully
shutting down all.

Se il problema è tra quelli citati da te, come potrei risolverli o
cercare di risolvere (o fare delle prove?) ?

Grazie mille

On 12/04/2013 10:09 AM, ste lab wrote:

Grazie della risposta, nel log non esce un errore, si ferma li senza
fare niente

Pool2/Implementation.cpp:xxxx ]: [App xxxxx stdout]

Quale versione di Passenger, 3.x o 4.x?
Quale versione di Ruby?
Quanta memoria ha la macchina?
Qual e’ la configurazione di Passenger, opzioni tipo
PassengerSpawnMethod, PassengerMaxPoolSize e ecc.?
In apache2.conf/httpd.conf quali sono le configurazioni nel blocco con
MaxClients, StartServers ecc?
Hai provato a eseguire l’istanza con Passenger standalone?

FS.

On 12/04/2013 10:54 AM, ste lab wrote:

configurazione passenger:
PassengerRoot “<%= @passenger_root %>”

MinSpareThreads 1
AllowOverride all

Prova ad alzare i MaxClients a 20 per combaciare con il pool di processi
di Passenger, e riavvia Apache.

Per esperimento, nella configurazione generale di Apache, prova anche ad
aumentare il Timeout a un valore superiore a 300, per esempio

Timeout 3000

Riavvia Apache e rilancia l’app.

Un’altra cosa che puoi tentare per escludere Passenger quale “colpevole”
lanciare Passenger da standalone nella directory di progetto (non
public, una directory su …/) come utente non root, cos si metter in
ascolto su una porta non privilegiata che di solito la tcp/3000.
Dovresti gi avere il comando passenger e basta che da l dai:

$ passenger start -e production

Poi ti connetti alla http://example.com:3000 e testi.

(
Per installare la versione standalone, se gi hai installato da
pacchetto passenger-apache, basta che lo cerchi nel tuo package manager.
Per esempio su CentOS/RHEL lo trovi nei repository EPEL:

yum install passenger-standalone

)

Mentre testi, avendo root, potresti controllare con questi strumenti
cosa sta succedendo:
iftop
htop

Hai gi isolato il problema a questo nodo di produzione mi sembra di
capire, cio dall’ambiente di devel/test il problema non si presenta?
Con quale application server lavori in locale? Webrick, Thin…?

Ciao spero di essere stato un po’ utile
Fabrizio.

Fabrizio S. wrote in post #1129591:

(
Per installare la versione standalone, se gi hai installato da
pacchetto passenger-apache, basta che lo cerchi nel tuo package manager.
Per esempio su CentOS/RHEL lo trovi nei repository EPEL:

yum install passenger-standalone

)

Mentre testi, avendo root, potresti controllare con questi strumenti
cosa sta succedendo:
iftop
htop

Hai gi isolato il problema a questo nodo di produzione mi sembra di
capire, cio di devel/test il problema non si presenta?
Con quale application server lavori in locale? Webrick, Thin…?

Ciao spero di essere stato un po’ utile
Fabrizio.

ciao, ho provato modificare MaxClients e TimeOut, riavviato il server
come mi dici, ma niente, il problema continua comunque il messaggio
esatto nel log è:

…agents/Watchdog/Main.cpp:366 ]: Some Phusion Passenger agent
processes did not exit in time, forcefully shutting down all

Non ho prvato ad eseguire passenger standalone, purtroppo ci sono altre
applicazioni installate e non vorrei fare dei danni nel server, non c’e
altro che posso fare? :frowning:

grazie

Fabrizio S. wrote in post #1129591:

On 12/04/2013 10:54 AM, ste lab wrote:

Hai gi isolato il problema a questo nodo di produzione mi sembra di
capire, ci di devel/test il problema non si presenta?
Con quale application server lavori in locale? Webrick, Thin…?

Ciao spero di essere stato un po’ utile
Fabrizio.

scusa non ti avevo risposto tutte le domande…

In locale (development) il problema non si presenta.
Uso server Thin in locale.

ciao, ho provato modificare MaxClients e TimeOut, riavviato il server
come mi dici, ma niente, il problema continua comunque il messaggio
esatto nel log è:

…agents/Watchdog/Main.cpp:366 ]: Some Phusion Passenger agent
processes did not exit in time, forcefully shutting down all

Non ho prvato ad eseguire passenger standalone, purtroppo ci sono altre
applicazioni installate e non vorrei fare dei danni nel server, non c’e
altro che posso fare? :frowning:

grazie

Ciao Stefano,
se devi fare una importazione molto lunga di un file ti converrebbe
farla
in modo asincrono usando qualcosa come delayed_job o altro.
Carichi il file di upload, lo fai processare in modo asincrono da
delayed_job e poi eventualmente notifichi l’avvenuto caricamentro
tramite
email

Il giorno 05 dicembre 2013 10:49, ste lab [email protected] ha
scritto:

Fabrizio S. wrote in post #1129522:

On 12/04/2013 10:09 AM, ste lab wrote:

Grazie della risposta, nel log non esce un errore, si ferma li senza
fare niente

Pool2/Implementation.cpp:xxxx ]: [App xxxxx stdout]

Quale versione di Passenger, 3.x o 4.x?
Quale versione di Ruby?
Quanta memoria ha la macchina?
Qual e’ la configurazione di Passenger, opzioni tipo
PassengerSpawnMethod, PassengerMaxPoolSize e ecc.?
In apache2.conf/httpd.conf quali sono le configurazioni nel blocco con
MaxClients, StartServers ecc?
Hai provato a eseguire l’istanza con Passenger standalone?

FS.

scusami tanto per le mie scarse conoscenze, mi hanno dato delle dritte
per mettere la app online e non ho conoscenze a sufficienza di
passenger, non ho eseguito Passenger standalone, non saprei neanche come
eseguirlo.

Phusion Passenger version 4.0.20
ruby 2.0.0p247
memoria della macchina in questo momento non lo so

configurazione passenger:
passenger_max_pool_size 20;
passenger_log_level 3;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
passenger_buffers 8 16k;
passenger_buffer_size 32k;

apache2/httpd.conf

LoadModule passenger_module “<%= @mod_passenger %>”
PassengerRoot “<%= @passenger_root %>”
PassengerDefaultRuby “<%= PlatformInfo.ruby_command %>”
PassengerDefaultUser <%= CONFIG[‘default_user’] %>
PassengerDefaultGroup <%= CONFIG[‘default_group’] %>
PassengerTempDir “<%= @passenger_temp_dir %>”
RailsEnv production
RackEnv production
PassengerLogLevel 1
<% for line in @extra %>
<%= line %>
<% end %>

TypesConfig “<%= @server_root %>/mime.types”
StartServers 1
ServerLimit 10
MaxRequestsPerChild 50
MaxClients 10

MinSpareServers 1
MaxSpareServers 1


MinSpareThreads 1
MaxSpareThreads 1
ThreadsPerChild 2


MinSpareThreads 1
MaxSpareThreads 1
ThreadsPerChild 2

AllowOverride all

On 12/05/2013 10:49 AM, ste lab wrote:

processes did not exit in time, forcefully shutting down all

Non ho prvato ad eseguire passenger standalone, purtroppo ci sono altre
applicazioni installate e non vorrei fare dei danni nel server, non c’e
altro che posso fare? :frowning:

Sarebbe importante riuscire a isolare se si tratta di un problema di
Apache o di Passenger. Non si pu escludere a priori nemmeno un bug in
Passenger.

Per Apache, esiste un’altra var di timeout da usare con cautela, se il
tuo ambiente shared te lo consente dovresti provare ad aumentare il
timeout per le keepalive alzandolo a 60 secondi, o anche a 100:

KeepAlive On
KeepAliveTimeout 60

Per Passenger, su che sistema operativo sei? Il comando passenger nudo
ce l’hai?
(http://www.modrails.com/documentation/Users%20guide%20Standalone.html#installation).
impossibile che fai danni al server se lo lanci in modalit
standalone, perch si mette in ascolto su una porta che dici tu, se
libera per esempio la 3030 dalla directory della tua app (dove si trova
il Gemfile) dai

passenger -e production --port 3030

Cos ti colleghi al tuo http://myapp.example.com:3030 e vedi.

Altre cose non saprei, magari a livello codice provare ad aumentare il
livello di debug scrivendo messaggi pi dettagliati in production.log,
per assicurarsi che sia un brutale problema di timeout o altro…

FS

francesco agati wrote in post #1129709:

Ciao Stefano,
se devi fare una importazione molto lunga di un file ti converrebbe
farla
in modo asincrono usando qualcosa come delayed_job o altro.
Carichi il file di upload, lo fai processare in modo asincrono da
delayed_job e poi eventualmente notifichi l’avvenuto caricamentro
tramite
email

Il giorno 05 dicembre 2013 10:49, ste lab [email protected] ha
scritto:

grazie della risposta, purtroppo l’importazione non la effettuo da file
ma da un db as400 (devo fare una select nel db è poi utilizzo il
resultset ottenuto)

ste lab wrote in post #1129718:

grazie della risposta, purtroppo l’importazione non la effettuo da file
ma da un db as400 (devo fare una select nel db è poi utilizzo il
resultset ottenuto)

Questo non impedisce di affidare l’import ad un delayed_job e lasciar
libero Passenger di servire altre richieste.

Hai fatto anche la prova di lanciare la query da rails c in produzione e
vedere quanto tempo impiega a completare e se va in errore
indipendentemente da passenger? Forse si potrebbe spezzare l’import in
una sequenza di operazioni su un numero inferiore di record, ad esempio
mille per volta.

Ultima cosa: se i record in arrivo dal db diventano degli ActiveRecord,
quando sono così numerosi potresti avere dei grossi overhead sul tuo
server (soprattutto memoria ma anche cpu). In tal caso potresti trarre
beneficio dall’interfaccia di livello inferiore ad ActiveRecord, ossia
quella usata dal driver di AR.

Paolo

ste usi odbc per accere ad as400?

Il giorno 06 dicembre 2013 14:42, Luca M. <
[email protected]> ha scritto:

2013/12/6 Paolo M. [email protected]

Questo non impedisce di affidare l’import ad un delayed_job e lasciar
libero Passenger di servire altre richieste.

stavo per rispondere piu’ o meno come hai fatto tu (mai fare import /
export in-request!), ma rileggendo il thread non sono piu’ sicuro che
quello che ste lab intende come ‘import’ sia proprio quello che dici.

lui dice:

Effettuo diverse connessioni a un db as400 e faccio delle ‘select’
condiversi campi, ottengo un resulset dopo di che lo inserisco in un
array(campo per campo).

se tutta l’operazione non e’ altro che la lettura dalla base dati as400
+
rielaborazione del dato in memoria (preparazione del result set) +
creazione di una pagina (html o altro) che presenta tutti i dati, allora
con 11000 righe di 13 campi non potrebbe essere semplicemente un
problema
di timeout di apache / passenger?
ci potrebbe stare come effetto (e.g. Passenger / l’applicazione rails in
questo caso non darebbe errore, come capita nel suo caso)
magari sbaglio…

ste lab: che deve fare l’applicazione con i dati che leggi da as400??

Luca

Paolo M. wrote in post #1129879:

ste lab wrote in post #1129718:

grazie della risposta, purtroppo l’importazione non la effettuo da file
ma da un db as400 (devo fare una select nel db è poi utilizzo il
resultset ottenuto)

Questo non impedisce di affidare l’import ad un delayed_job e lasciar
libero Passenger di servire altre richieste.

Hai fatto anche la prova di lanciare la query da rails c in produzione e
vedere quanto tempo impiega a completare e se va in errore
indipendentemente da passenger? Forse si potrebbe spezzare l’import in
una sequenza di operazioni su un numero inferiore di record, ad esempio
mille per volta.

Ultima cosa: se i record in arrivo dal db diventano degli ActiveRecord,
quando sono così numerosi potresti avere dei grossi overhead sul tuo
server (soprattutto memoria ma anche cpu). In tal caso potresti trarre
beneficio dall’interfaccia di livello inferiore ad ActiveRecord, ossia
quella usata dal driver di AR.

Paolo

Ciao, ho provato a spezzare l’import in diversi modi ma niente, va in
loop comunque.
Io non ho tanta esperienza in ror, purtroppo e quando parli di
interfaccia di livello inferiore ad ActiveRecord, quella usata dal
driver di AR ??? a cosa ti riferisci ???

grazie della risposta

Luca M. wrote in post #1129881:

2013/12/6 Paolo M. [email protected]

Questo non impedisce di affidare l’import ad un delayed_job e lasciar
libero Passenger di servire altre richieste.

stavo per rispondere piu’ o meno come hai fatto tu (mai fare import /
export in-request!), ma rileggendo il thread non sono piu’ sicuro che
quello che ste lab intende come ‘import’ sia proprio quello che dici.

lui dice:

Effettuo diverse connessioni a un db as400 e faccio delle ‘select’
condiversi campi, ottengo un resulset dopo di che lo inserisco in un
array(campo per campo).

se tutta l’operazione non e’ altro che la lettura dalla base dati as400
+
rielaborazione del dato in memoria (preparazione del result set) +
creazione di una pagina (html o altro) che presenta tutti i dati, allora
con 11000 righe di 13 campi non potrebbe essere semplicemente un
problema
di timeout di apache / passenger?
ci potrebbe stare come effetto (e.g. Passenger / l’applicazione rails in
questo caso non darebbe errore, come capita nel suo caso)
magari sbaglio…

ste lab: che deve fare l’applicazione con i dati che leggi da as400??

Luca

i dati dopo essere stati importati li inserisco in un db interno,
diventano oggetti activerecord dentro un model

Come ho spiegato all’inizio, effettua altre import da as400 ma con
quantità di dati e colonne minori e non si blocca, va tutto liscio, e
questa operazione nella quale si blocca, lo fa solo in produzione, il
locale non c’e problema.

grazie

On 12/09/2013 09:06 AM, ste lab wrote:

comunque ho provato a lanciare

passenger -e production --port 3030

mi dice

Unknown command ‘-e’. Please type --help for options

grazie

Scusa lapsus

$ passenger start -e production --port 3030

http://www.modrails.com/documentation/Users%20guide%20Standalone.html#_command_line_options

E funziona?

Fabrizio S. wrote in post #1130169:

On 12/09/2013 09:06 AM, ste lab wrote:

comunque ho provato a lanciare

passenger -e production --port 3030

mi dice

Unknown command ‘-e’. Please type --help for options

grazie

Scusa lapsus

$ passenger start -e production --port 3030

http://www.modrails.com/documentation/Users%20guide%20Standalone.html#_command_line_options

E funziona?

ciao, ho provato a lanciare passenger, si avvia ma nel browser mi da
errore 404 not found
nginx/1.4.2

On 12/10/2013 02:11 PM, ste lab wrote:

ciao, ho provato a lanciare passenger, si avvia ma nel browser mi da
errore 404 not found
nginx/1.4.2

Domanda stupida invocato col browser su http://example.com:3030 vero?
Probabilmente avete settato un reverse proxy Nginx davanti? Allora
potrebbe andare in timeout anche quello.
Che configurazione globale stata fatta?

FS.

Fabrizio S. wrote in post #1129867:

On 12/05/2013 10:49 AM, ste lab wrote:

processes did not exit in time, forcefully shutting down all

Non ho prvato ad eseguire passenger standalone, purtroppo ci sono altre
applicazioni installate e non vorrei fare dei danni nel server, non c’e
altro che posso fare? :frowning:

Sarebbe importante riuscire a isolare se si tratta di un problema di
Apache o di Passenger. Non si pu escludere a priori nemmeno un bug in
Passenger.

Per Apache, esiste un’altra var di timeout da usare con cautela, se il
tuo shared te lo consente dovresti provare ad aumentare il
timeout per le keepalive alzandolo a 60 secondi, o anche a 100:

KeepAlive On
KeepAliveTimeout 60

Per Passenger, su che sistema operativo sei? Il comando passenger nudo
ce l’hai?

(http://www.modrails.com/documentation/Users%20guide%20Standalone.html#installation).

impossibile che fai danni al server se lo lanci in modalit
standalone, perch si mette in ascolto su una porta che dici tu, se
libera per esempio la 3030 dalla directory della tua app (dove si trova
il Gemfile) dai

passenger -e production --port 3030

Cos ti colleghi al tuo http://myapp.example.com:3030 e vedi.

Altre cose non saprei, magari a livello codice provare ad aumentare il
livello di debug scrivendo messaggi pi dettagliati in production.log,
per assicurarsi che sia un brutale problema di timeout o altro…

FS

Ho modificato i valori

KeepALive

riavviato server, provato di nuovo, niente, nessun cambiamento.

Il comando passenger nudo da:

passenger

Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.

Available commands:

passenger start Start Phusion Passenger Standalone.
passenger stop Stop a running Phusion Passenger Standalone
instance.
passenger status Show the status of a running Passenger
Standalone
instance.
passenger package-runtime Package the Phusion Passenger Standalone
runtime.

Special options:

passenger --help Display this help message.
passenger --version Display version number.

For more information about a specific command, please type
‘passenger --help’, e.g. ‘passenger start --help’.

…è possibile che sia gia standalone?? (la macchina l’hanno preparata,
non ho installato io)

comunque ho provato a lanciare

passenger -e production --port 3030

mi dice

Unknown command ‘-e’. Please type --help for options

grazie