Come condividere la cache APC tra diversi processi di PHP durante l'esecuzione in FastCGI?

StackOverflow https://stackoverflow.com/questions/598444

  •  11-09-2019
  •  | 
  •  

Domanda

Sono attualmente in esecuzione diverse copie di PHP / FastCGI, con abilitato APC (sotto Apache + mod_fastcgi, se quello che conta). Posso condividere la cache tra i processi? Come posso verificare se è condiviso già? (Credo che l'impostazione apc.mmap_file_mask ini potrebbe essere coinvolto, ma non so come usarlo.)

(Una delle ragioni per cui credo proprio non condiviso in questo momento è che la apc.mmap_file_mask, come riportato da l'interfaccia web apc.php ribalta tra circa 3 diversi valori come ricarico.)

È stato utile?

Soluzione

APC fa non Al momento condividere la cache tra più lavoratori php-cgi che girano sotto FastCGI o fcgid. Vedere questa funzione richiesta per i dettagli: "questo comportamento è l'intesa uno come d'ora".

Una soluzione è quella di consentire PHP per gestire i propri lavoratori. È possibile farlo usando la variabile d'ambiente PHP_FCGI_CHILDREN nello script involucro (un sacco di esempi in tutto il web per questo). Si dovrebbe anche smettere di FastCGI / fcgid dalla deposizione delle uova più di un processo di PHP, se si desidera utilizzare questo metodo.

Lo svantaggio con PHP_FCGI_CHILDREN è che la sua gestione dei lavoratori non è buono come quello fornito da fcgid / FastCGI.

Quindi, ci siamo. APC in un ambiente fcgid / FastCGI significa dare ogni lavoratore PHP propria cache, o disabilitando la deposizione delle uova di processo fcgid / di FastCGI in favore di una gestione integrata di PHP. Speriamo questo cambia in futuro.

Altri suggerimenti

Anche se non è perfetto il metodo Domster suggerito è il migliore. Ho fatto questo per un breve periodo di tempo su alcuni siti a basso volume senza errori. Ho scritto una spiegazione dettagliata su come impostare mod_fastcgi con una cache codice operativo condiviso la scorsa notte.

L'ho trovato molto importante utilizzare mod_fastcgi piuttosto che la più recente mod_fcgid perché mod_fcgid invierà solo una richiesta alla volta per il processo PHP indipendentemente dal numero di figli PHP ha generato tramite PHP_FCGI_CHILDREN.

La cache dovrebbe essere condivisa tra i processi. Si dovrebbe vedere lo stesso valore per il file mmap tra phpinfo () e invocazioni apc.php. Si sta lavorando per me con le impostazioni di configurazione predefinite APC suggerite:

extension="apc.so"
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.enable_cli=1

Si consiglia di inserire le impostazioni. Ho visto gli avvertimenti che il mmap_file_mask deve essere esattamente uno dei valori che permettono. Quindi, se vi manca uno di questi Xs non si può dire che cosa otterrete.

Forse si tratta della configurazione FastCGI + apache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top