Am un set de scripturi PHP 7.4 care rulează cu extensia APCu, care este folosit de cod ca magazin de obiecte general pentru toți utilizatorii care vizitează site-ul unic găzduit. Din cauza propriei lipse de înțelegere, am aflat ulterior că cache-ul APCu este stabilit per proces PHP. Deci ceea ce văd este că în unele cazuri utilizator „a” primește o valoare din cache diferită de utilizator „b” (probabil de când PHP-FPM a introdus un nou proces pentru utilizatorul „b”).
Dar încă nu îmi este clar cum să configurez php-fpm, astfel încât toate cererile primite să fie în interiorul proceselor copil care sunt derivate din același proces părinte.
APCu guru krakjoe spus asta în 2015 (sublinierea mea cu aldine):
Doar pentru a răspunde la întrebarea inițială... așa cum a spus @fruitl00p, puteți
configurați-vă calea de ieșire din problema de a nu putea partaja dacă
folosești fpm.
Există o diferență între utilizarea fpm și utilizarea fcgi, ar trebui
probabil a pus un PR la phptherightway pentru a lămuri.
Regula este că numai procesele secundare pot accesa ceea ce părintele lor
creată; În FCGI, procesele generate nu sunt neapărat un copil al
părintele lor, s-ar putea să nu fie adevărate furculițe. Dacă managerul dvs. de proces
funcționează ca FCGI/CGI convențional, atunci nu veți putea partaja,
dacă funcționează ca FPM și inițializează PHP într-un părinte și furcă copilul
interpreți atunci nu veți avea nicio problemă.
Cercetările ulterioare m-au condus la fișierul php-fpm www.conf și la setările pentru:
pm = dinamic
pm.max_children = 50
Deci - este la fel de simplu ca schimbarea asta în:
pm = static
pm.max_children = 50
adică aceasta este modalitatea de a forța php-fpm pentru a vă asigura că toate procesele copil indică înapoi la un singur părinte? Astfel, asigurându-vă că există un singur cache global APCu în joc? Îmi dau seama că trebuie să fac matematică pentru a afla valoarea corectă a pm.max_children.
Vă rugăm să rețineți: Nu pot trece la memcached în acest moment, deoarece mă bazez pe o iterație regex peste tastele APCu prin intermediul unui obiect APCUIterator. S-ar putea să ajung acolo până la urmă, dar de acum trebuie să rămân cu APCu.