Per dare qualche contesto:Come funziona davvero l'utilizzo della memoria PHP di apache?
Ho avuto una discussione con un collega di recente sull'uso di Autoloaders in PHP. Stavo discutendo a favore di loro, lui contro.
Il mio punto di vista è che i caricatori automatici possono aiutare a ridurre al minimo la dipendenza manuale dell'origine, che a sua volta può aiutare a ridurre la quantità di memoria consumata quando si includono molti file di grandi dimensioni che potrebbero non essere necessari.
La sua risposta è stata che includere file non necessari non è un grosso problema perché dopo che un file è stato incluso una volta che viene tenuto in memoria dal processo figlio Apache e questa porzione di memoria sarà disponibile per le richieste successive. Sostiene che non dovresti preoccuparti della quantità di file inclusi perché abbastanza presto saranno tutti caricati in memoria e utilizzati on-demand dalla memoria. Quindi la memoria è meno di un problema e il sovraccarico di cercare di trovare il file che ti serve sul filesystem è molto più preoccupante.
È un ragazzo intelligente e tende a sapere di cosa sta parlando. Tuttavia, ho sempre pensato che la memoria utilizzata da Apache e PHP fosse specifica per quella particolare richiesta gestita. Ad ogni richiesta viene assegnata una quantità di memoria pari all'opzione memory_limit PHP e qualsiasi compilazione ed elaborazione di origine è valida solo per la vita della richiesta.
Anche con cache op-code come APC, ho pensato che la singola richiesta deve ancora caricare ogni file nella sua porzione di memoria e che APC è solo una scorciatoia per averlo precompilato per il processo di risposta .
Ho cercato una documentazione su questo ma non sono riuscito a trovare nulla finora. Lo apprezzerei davvero se qualcuno potesse indicarmi qualsiasi documentazione utile su questo argomento.
UPDATE:
solo per chiarire, la parte discussione caricatore automatico era più di un contesto :).
Potrebbe non essere stato chiaro ma la mia domanda principale è se Apache riunirà le sue risorse per rispondere a più richieste (specialmente la memoria utilizzata dai file inclusi), o se ciascuna richiesta dovrà recuperare il codice richiesto per soddisfare il percorso di esecuzione in isolamento da altre richieste gestite dallo stesso processo.
ad es .: I file 1, 2, 3 e 4 sono della stessa dimensione di 100 KB ciascuno. Richiedere un include file di 1, 2 e 3. Richiesta B include file di 1, 2, 3 e 4.
Nella sua mente sta pensando che richiedono un consumerà 300 KB per la totalità di esso è l'esecuzione e Richiesta B solo la volontà consumare ulteriori 100 KB poiché i file 1,2 e 3 sono già in memoria.
Nella mia mente sono 300KB e 400KB perché sono entrambi elaborati indipendentemente (se per lo stesso processo).
Questo lo riporta alla sua argomentazione secondo cui "basta includere il lotto in quanto lo userete comunque" in contrapposizione al mio "include solo ciò che è necessario per mantenere la dimensione della richiesta verso il basso".
Questo è abbastanza fondamentale per il modo in cui mi avvicino alla costruzione di un sito Web PHP, quindi sarei curioso di sapere se sono fuori luogo qui.
Sono sempre stato convinto che per la memoria di siti Web su larga scala sia la risorsa più preziosa e più preoccupante dei controlli del file system per un autoloader che è probabilmente memorizzato nella cache dal kernel.
Hai ragione, è il momento di fare un punto di riferimento!
Grazie Matthew, ho apportato una modifica al post originale nel caso in cui questo aiuti, ma eseguirò sicuramente alcuni test! – Sirhara
Non sono sicuro di come mod_php gestisca la stessa pagina, ma se si utilizza una cache di opcode, i file PHP saranno sicuramente nella memoria condivisa. Il modo in cui capisco vanilla PHP, è che su ogni richiesta il file viene aperto, analizzato ed eseguito ... quindi non sono sicuro di dove si sarebbe verificata la condivisione della memoria. Penso che si arrivi ancora al benchmarking ... usa qualcosa come 'ab' per eseguire i test. Sono sicuro che vedrai che l'uso del caricamento automatico dipende o meno dalle preferenze personali ... Non penso che le prestazioni saranno significativamente diverse. – Matthew