Newsgroup: it.comp.os.linux.sys
Titolo: fcgid, fastcgid, spawn-fcgi, e poi?

Ciao,
ho un normale server LAMP configurato con PHP in FastCGI.
Sto avendo problemi (diversi, ma comunque problemi) con pressochè ogni
modulo fastcgi da associare ad apache, quelli in oggetto li ho provati
tutti, ma in un modo o nell'altro non vanno bene.
C'è qualcosa di 'standard' da usare? mod_fastcgi sembra non più
sviluppato, l'ultima versione risale al periodo dei dinosauri, fcgid
genera vagonate di errori in error_log e spesso gli utenti mi dicono
di aver riscontrato errori 500 (inoltre, non mi pare gestisca
correttamente i processi php), spawn-fcgi sembra perfetto e non
necessita nemmeno di suexec (lo uso con successo anche su altri server
con abbinato nginx) ma in caso di virtualhosting è complicato gestirne
X istanze.
Che altro si può usare per mettere in collegamento X virtualhost di
apache con Y istanze php (1 virtualhost = 1 utente = 1 o massimo 2
istanze php)

 ma in un modo o nell'altro non vanno bene.
... credo che approfondire questi aspetti sul NG potrebbe aiutarti ad 
avere una risposta.
Dopotutto, se non si sa che problemi hai, che consigli vuoi avere, no ?

 Dopotutto, se non si sa che problemi hai, che consigli vuoi avere, no ?
Sapere se ci sono alternative oltre a quelli citati in oggetto.
I problemi, comunque, sono i seguenti:
mod_fastcgi: vecchissimo, non più supportato, vagonate di errori nel
log di apache, scarissima gestione dei processi (mi pare esegua un
processo php per ciascun accesso)
mod_fcgid: recente, supportato, errori di tanto in tanto nei log ed
errori 500 visualizzati dagli utenti. Non riesco a capire come caspita
configurarlo per avere 1 o al massimo 2 processi PHP per ciascun vhost
ed inoltrare le richieste (per tale vhost) al processo PHP già in 
esecuzione. Il più frequente è:
"mod_fcgid: can't apply process slot for /wrapper.fcgi"
dove /wrapper.fcgi non corrisponde al wrapper di quel sito (ma di
un altro vhost)
1) non riesco a capire come mai cerca di caricare /wrapper.fcgi e
non quello corretto
2) stando a google, sembra un errore di permessi, ma se così fosse
si presenterebbe sempre e non di tanto in tanto. Il sito funziona,
è raggiungibile, ma ogni tanto spara fuori un errore 500 abbinato
al messaggio di cui sopra scritto nei log. Lo fa per 15 minuti di
fila poi riparte.
mod_fastcgi+spawn-fcgi: sembra funzionare perfettamente (l'unica 
configurazione di mod_fastcgi che uso è la externalserver che punta
ad una istanza di php-cgi eseguita tramite spawn-fcgi). Il problema
è che devo gestire 300-400 istanze php-cgi e quindi devo eseguire uno
spawn-fcgi per ciascuna di esse. Ho tamponato con i daemontools, ma
la gestione dei processi è un bagno di sangue. Non terminano, non c'è
modo di ammazzarli e farli ripartire se non tramite un brutale killall.
Insomma, alla lunga diventa un massacro. Altro aspetto da non 
sottovalutare: i processi vanno fatti partire tutti e sempre, e non al
primo accesso del vhost. Se avessi un cliente con 1 visita a settimana,
il suo processo php sarebbe sempre attivo nonostante del tutto 
superfluo. Questa soluzione la trovo adatta in caso di pochi vhost e
tutti particolarmente trafficati, in cui puoi permetterti di avere il
php sempre in esecuzione. (tant'è che nei nuovi server configuro
nginx con spawn-fcgi, ma son server mono-sito o poco di più)
Quello che devo ottenere, sulla carta, è molto semplice:
1 o massimo 2 processi php-cgi per ciascun vhost (avviati alla bisogna)
ed il singolo vhost deve dirottare le richieste sempre al singolo
processo. Ciascuna istanza php-fcgi deve terminare se non riceve 
richieste per 30 minuti, fino ad arrivare a 0 istanze attive per il
signolo vhost. In pratica parto da 0 istanze, alla prima richiesta ne 
avvio 1, se serve avvio la seconda (e li mi fermo), per poi tornare a 
zero se le istanze non ha ricevuto richieste per mezzora. Inoltre: che 
vantaggi ci sono a configurare 1 processo o 10? il processo php riesce 
ad eseguire solo 1 richiesta per volta?
Quindi nel caso avessi un solo php-cgi per ciascun vhost, riuscirei a
soddisfare una sola richiesta contemporanea? Non credo, perchè stando
a fcgid (visibile tramite mod_status di apache) con 2 processi riesco
a gestire centinaia di richieste.
In sostanza: come cacchio funziona fcgid? sarebbe perfetto,
se solo riuscissi a diagnosticare (e sopratutto risolvere) i suoi 
incomprensibili errori.
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.

 processo. 
Ti serve solo fastcgi, non fcgid. ed un sano tuning.
(se trovassi un cazzo di link che guardavo qualche giorno fa, avresti 
tutto perfettamente documentato in una singola pagina. Ma non lo trovo.)

 tutto perfettamente documentato in una singola pagina. Ma non lo trovo.)
Te che config useresti?
Useresti poi fastcgi al posto di fcgid ?

 Useresti poi fastcgi al posto di fcgid ?
Ci sarebbe anche proxy_fcgi però poi resterebbe il problema
nell'avviare
le istanze php-cgi

 Ti serve solo fastcgi, non fcgid. ed un sano tuning.
Ho trovato un link in cui suggeriscono di usare fastcgi configurato
per
eeguire una sola istanza di php-cgi e poi usare il process manager
integrato
di php, settando l'opportuna variabile dal wrapper. In questo modo
apache
gira le richieste al singolo processo fastcgi, il quale le gira al php
che
deciderà in autonomo a quale processo farle gestire.
un lato negativo è che mi ritroverei con X processi allocati
staticamente,
ad esempio 5 per ogni virtualhost, anche quando non c'è traffico.
Potrei, però, usare APC con cache condivisa tra tutto il vhost.
In maniera opposta, con fcgid ogni richiesta va in una singola istanza
di php-cgi,
quindi niente APC (non servirebbe a nulla) ma in compenso avrei i
processi in esecuzione
solo quando serve e non allocati staticamente.

Il Thu, 10 Mar 2011 14:40:04 -0800, Gandalf Mithrandir ha scritto:
[CUT]
http://blog.foaa.de/2010/11/php-apache-and-fastcgi-a-comprehensive-
overview/
Qui dovresti trovare tutto lo scibile su quest'argomento.

 Qui dovresti trovare tutto lo scibile su quest'argomento.
Grazie, questa sera con calma leggo.
Per ora ho trovato una configurazione 'carina': fastcgi che esegue
solo UN processo per vhost (maxClassProcess=1) e delega la gestione
dei processi a php stesso. Eseguo 2 processi php paralleli che
condividono la stessa cache APC, il che non guasta. Le performance
mi sembrano analoghe a mod_php senza APC (nessun test scientifico,
ho semplicemente aperto il browser ed il tempo di caricamento a
partire
dalla seconda volta è istantaneo. La prima deve avviare php ed impiega
1 secondo in più.)
Sto avendo difficoltà, però, ad uccidere i processi dopo 5 minuti
di inattività. Spero di trovare risposta in quel link.