Acasă
» ADMIN. REȚEA
»
Remediază eroarea „Limita de memorie PHP sub valoarea recomandată” în ownCloud 10
Remediază eroarea „Limita de memorie PHP sub valoarea recomandată” în ownCloud 10
Rezultatul dorit nu este doar „dispărurea avertismentului”. O soluție corectă înseamnă că procesul PHP care deservește efectiv ownCloud 10 raportează o limită de memorie de cel puțin 512 MB, avertismentul de administrator ownCloud se șterge, joburile programate sau CLI utilizează și ele o limită adecvată și gazda are încă suficientă memorie fizică pentru a rula PHP, serverul web, baza de date și joburile în fundal fără schimburi intense de date.
Pentru ownCloud Classic 10.16, mediul oficial Docker folosește OWNCLOUD_MEMORY_LIMIT=512Mca implicit recomandat. Documentația ownCloud distinge, de asemenea, configurația PHP utilizată de serverul web de cea utilizată de php-cli. Această distincție este principalul motiv pentru care administratorii uneori modifică memory_limit, repornesc un serviciu și tot văd același avertisment.
Acest ghid începe cu verificările cele mai puțin perturbatoare, apoi prezintă căile Apache, PHP-FPM, CLI și Docker. De asemenea, explică când este justificată creșterea limitei și când problema reală este memoria RAM insuficientă a gazdei, mai degrabă decât setarea PHP în sine.
Cum arată succesul
Verifica
Rezultat bun
Dacă eșuează
Prezentare generală a administratorului ownCloud
Niciun avertisment „Limita de memorie PHP sub valoarea recomandată”
Probabil ai editat configurația PHP greșită sau nu ai repornit serviciul corect.
Runtime PHP web
memory_limitarată 512M sau mai mult
Găsiți fișierul de configurare încărcat utilizat de solicitarea web.
Suficientă memorie RAM disponibilă; presiune de swap susținută mică sau deloc
Nu creșteți limitele PHP orbește. Revizuiți numărul de workeri PHP sau dimensionarea gazdelor.
Jurnalele
Nicio eroare recurentă de tipul „Dimensiunea memoriei permise a fost epuizată”
Găsiți volumul de lucru care consumă memorie înainte de a crește din nou limita.
1. Confirmați avertismentul și valoarea pe care o vede ownCloud
Începeți de la valoarea vizibilă pentru ownCloud. O limită de 128 MB sau 256 MB pentru web-runtime este sub valoarea de 512 MB utilizată de configurația Docker recomandată de ownCloud.
Deschideți setările de administrare ownCloud și notați avertismentul privind limita de memorie. Înainte de a modifica orice, înregistrați versiunea ownCloud, versiunea PHP, tipul serverului web și limita curentă de memorie. Acest lucru vă oferă o bază de referință și ajută la prevenirea modificării unei instalări PHP greșite pe sistemele cu mai multe versiuni PHP.
Documentația actuală a versiunii 10.16 a ownCloud precizează că cerințele serverului depind în mare măsură de numărul de utilizatori, numărul de fișiere și activitate. Configurația Docker setează OWNCLOUD_MEMORY_LIMIT=512Mși recomandă păstrarea acestei valori implicite. Acest lucru face ca 512 MB să fie o valoare de referință rezonabilă pentru rezolvarea avertismentului, nu o garanție că fiecare sarcină de lucru se va încadra în limita a 512 MB.
Acest lucru este util pentru occjoburi cron și cron, dar nu dovedește ce folosește cererea web. ownCloud documentează explicit căi de configurare separate, cum ar fi:
Dacă interfața CLI afișează 512M în timp ce pagina de administrare încă afișează probleme, acea nepotrivire este un semn puternic că serverul web încarcă un alt fișier php.ini.
Consultați notele de configurare PHP ale ownCloud , care avertizează în mod specific că este posibil să fie nevoie să modificați setările PHP în mai multe fișiere INI.
3. Găsiți configurația PHP utilizată de cererea web
Comparați runtime-ul PHP al browserului cu runtime-ul CLI. Fișierul de configurare încărcat din browser este fișierul care contează pentru avertismentul web ownCloud.
Cel mai fiabil test este inspectarea PHP din aceeași stivă web care deservește ownCloud. Documentația ownCloud descrie utilizarea unei phpinfo.phppagini temporare:
<?php phpinfo(); ?>
Plasați-l temporar în rădăcina web, deschideți-l într-un browser și localizați:
Fișier de configurare încărcat
limită_de_memorie
API-ul serverului
Apoi ștergeți imediat fișierul phpinfo . ownCloud avertizează că părăsirea unei pagini phpinfo publice expune informații sensibile ale serverului.
Dacă browserul spune „ /etc/php/7.4/fpm/php.iniwhile php --inisays” /etc/php/7.4/cli/php.ini, acum știi exact de ce editarea fișierului CLI nu a șters avertismentul.
4. PHP-FPM: creșterea limitei de execuție web la 512M
Pentru o configurare Nginx sau Apache folosind PHP-FPM, modificați FPM-ul php.inisau suprascrierea aplicabilă a pool-ului/site-ului, nu doar fișierul CLI.
Pe o instalare tipică de Debian sau Ubuntu:
sudo nano /etc/php/7.4/fpm/php.ini
Găsi:
memory_limit = 128M
și schimbați-l în:
memory_limit = 512M
Folosește versiunea PHP instalată în cale. Apoi, repornește serviciul FPM corect și serverul web, dacă este necesar:
Pentru Apache cu proxy_fcgisau o altă configurație FPM, reporniți PHP-FPM și reîncărcați Apache în schimb.
ownCloud menționează, de asemenea, că PHP-FPM nu consumă setări PHP din .htaccess. Dacă vă bazați pe suprascrieri per director cu FPM, utilizați mecanismul de configurare PHP/FPM acceptat pentru mediul dvs., cum ar fi php.iniconfigurația corespunzătoare , pool sau .user.ini.
5. Apache cu mod_php: editați configurația Apache PHP
Cu Apache mod_php, editați configurația PHP specifică Apache și reporniți Apache astfel încât noile procese worker să încarce noua limită.
Dacă Apache încarcă PHP direct ca modul, editați fișierul specific Apache:
sudo nano /etc/php/7.4/apache2/php.ini
Set:
memory_limit = 512M
Apoi reporniți Apache:
sudo systemctl restart apache2
Nu copiați mecanic numărul versiunii. Verificați versiunea încărcată efectiv de Apache. Sistemele actualizate prin intermediul mai multor versiuni PHP păstrează adesea mai multe directoare sub /etc/php/.
Criteriul rezultatului este simplu: după repornire, runtime-ul PHP orientat spre web trebuie să afișeze noua valoare. Dacă încă afișează 128M, un alt strat de configurare suprascrie editarea ta.
6. Actualizați limita CLI atunci când occ sau cron utilizează prea puțină memorie
Avertismentul web pentru administratori este generat de runtime-ul web, dar occjoburile cron utilizează interfața de comandă PHP. Documentația ownCloud menționează acest lucru în mod explicit.
Edita:
sudo nano /etc/php/7.4/cli/php.ini
Set:
memory_limit = 512M
Apoi verificați:
php -r 'echo ini_get("memory_limit"), PHP_EOL;'
Nu este nevoie să reporniți un serviciu pentru CLI PHP, deoarece fiecare invocare CLI pornește un proces nou. Dar dacă jobul cron apelează explicit un alt fișier binar PHP, verificați exact acel fișier binar, în loc să presupuneți că /usr/bin/phpeste cel utilizat.
ownCloud recomandă rularea occca utilizator HTTP, de obicei www-datape Debian/Ubuntu. Documentația oficială occ avertizează, de asemenea, că occar trebui utilizată aceeași versiune PHP ca serverul web atunci când sunt instalate mai multe versiuni.
7. Docker: folosiți OWNCLOUD_MEMORY_LIMIT în loc să editați fișierele din interiorul containerului
Pentru containerul oficial ownCloud, setați OWNCLOUD_MEMORY_LIMIT=512Mîn mediul containerului și recreați serviciul astfel încât configurația PHP generată să fie actualizată.
Pentru imaginea oficială ownCloud Docker, utilizați variabila de mediu documentată:
environment:
OWNCLOUD_MEMORY_LIMIT: 512M
Apoi recreați serviciul:
docker compose up -d
Nu faceți corecția principală editând php.iniîn interiorul unui container efemer. Recreerea containerului poate elimina aceste modificări. Documentația oficială a mediului ownCloud Docker definește OWNCLOUD_MEMORY_LIMIT=512Mși recomandă păstrarea acelei valori implicite.
Dacă gazda Docker are o limită de memorie strictă, verificați și constrângerile containerului:
docker stats
O limită PHP de 512 MB nu oferă în mod magic containerului 512 MB de memorie liberă; aceasta permite doar unei singure cereri PHP să consume până la această cantitate. Containerul și gazda au nevoie în continuare de suficientă memorie pentru toți workerii PHP simultani și alte servicii.
8. Reporniți serviciul corect și verificați din același runtime
Remedierea este completă numai atunci când runtime-ul web raportează 512M sau mai mult și ownCloud nu mai afișează avertismentul de memorie insuficientă.
După repornirea serviciului relevant, verificați din nou pagina temporară phpinfo sau prezentarea generală a administratorului ownCloud. Apoi eliminați pagina phpinfo.
Dacă ați modificat PHP-FPM, verificați:
sudo systemctl status php7.4-fpm
sudo systemctl status nginx
Dacă ați modificat Apache:
sudo systemctl status apache2
Reîmprospătați pagina de administrare ownCloud. Avertismentul ar trebui să dispară dacă ownCloud se execută acum cel puțin cu limita așteptată.
9. Verificați memoria RAM a gazdei înainte de a crește limita PHP peste 512M
După creșterea limitei per cerere, verificați memoria totală a sistemului și comportamentul worker-ului PHP. Un plafon PHP mai mare poate crește consumul de RAM în cel mai rău caz atunci când sunt activi mulți worker-i.
Aleargă:
free -h
ps aux | grep php-fpm
vmstat 1
PHP memory_limiteste un plafon per script. Nu este o rezervare și nu este același lucru cu cantitatea de RAM de care are nevoie serverul. Dacă aveți 20 de worker-i PHP și acordați fiecărei cereri permisiunea de a utiliza o cantitate foarte mare de memorie, cel mai rău caz teoretic poate depăși memoria RAM a mașinii cu o marjă largă.
Documentația de optimizare ownCloud oferă același avertisment general pentru procesele serverului web: dimensionați numărul de procese astfel încât utilizarea agregată a memoriei să rămână sub memoria RAM disponibilă, altfel sistemul începe să schimbe memoria și performanța scade. Consultați îndrumările de optimizare ownCloud Classic .
Dacă avertismentul 512M a dispărut și operațiunile obișnuite sunt sănătoase, nu există niciun motiv pentru a crește limita doar pentru a face numărul mai mare.
10. Când 512M încă produce mesajul „Dimensiune memorie permisă epuizată”
O avertizare de recomandare ștersă și o eroare de epuizare a memoriei sunt probleme diferite. Dacă jurnalele conțin mesaje precum:
PHP Fatal error: Allowed memory size of ... bytes exhausted
identificați operațiunea care o declanșează. Scanările mari, lucrările de criptare, operațiunile de stocare externă, procesarea imaginilor sau o aplicație terță parte pot avea profiluri de memorie foarte diferite.
Verificați jurnalul ownCloud și jurnalul de erori PHP/server web. O instalare standard ownCloud își scrie propriul jurnal în directorul de date configurat, de obicei data/owncloud.log. Evitați să tratați „creșteți la 1G” ca pasul următor automat. Mai întâi stabiliți dacă aceeași operațiune atinge în mod repetat limita.
Dacă o sarcină administrativă cunoscută are nevoie în mod legitim de mai multă memorie, o suprascriere CLI specifică poate fi mai sigură decât limitarea globală a fiecărei cereri web:
php -d memory_limit=1G occ <command>
Folosește această funcție doar atunci când comanda și comportamentul memoriei sunt înțelese. Nu remediază o cerere web care rulează prin PHP-FPM sau Apache.
De ce avertismentul poate persista după editarea fișierului php.ini
Simptom
Cauza probabilă
Următoarea verificare
php -rarată 512M, ownCloud încă arată 128M
Ai modificat doar CLI PHP
Verificați phpinfo-ul browserului și fișierul său de configurare încărcat.
Fișierul FPM afișează 512M, browserul încă afișează 128M
Pool, .user.ini, sau un alt fișier INI îl suprascrie.
Inspectați valorile „local” și „master” din phpinfo și fișierele INI analizate suplimentar.
Valoarea se schimbă numai după repornire
Serviciul corect nu a fost repornit
Reporniți PHP-FPM sau Apache explicit după editare.
Valoarea Docker revine la vechea setare după recreare
Ai editat în interiorul containerului
Setați OWNCLOUD_MEMORY_LIMITîn Compose sau în mediul de implementare.
Avertismentul dispare, dar serverul începe să facă schimb de informații.
Concurența PHP depășește memoria gazdei
Reduceți numărul de lucrători, optimizați volumul de lucru sau adăugați RAM.
Nu confundați memory_limit cu limitele de încărcare
memory_limit, upload_max_filesize, și post_max_sizerezolvă diferite probleme. Creșterea memoriei PHP nu permite automat utilizatorilor să încarce fișiere mai mari. Notele de configurare ale ownCloud 10.16 precizează separat că post_max_sizear trebui configurat la cel puțin 512 MB pentru minimul documentat și explică faptul că limitele de încărcare necesită setări proprii.
Dacă simptomul real este „încărcările mari eșuează”, verificați upload_max_filesize, post_max_size, limitele dimensiunii corpului serverului proxy/web, timeout-urile și capacitatea temporară a discului. Nu utilizați o valoare mai mare memory_limitca înlocuitor pentru aceste controale.
Listă de verificare finală
Confirmați avertismentul și valoarea curentă în ownCloud.
Identificați dacă ownCloud folosește Apache mod_php sau PHP-FPM.
Găsiți fișierul de configurare încărcat al runtime-ului web .
Setați PHP-ul web memory_limitla cel puțin 512M.
Actualizați și CLI PHP dacă occsau cron folosește o limită inferioară.
Pentru Docker, setați OWNCLOUD_MEMORY_LIMIT=512Mîn mediul de implementare.
Reporniți sau recreați serviciul care deservește de fapt PHP.
Verificați valoarea din runtime-ul web, nu doar din CLI.
Confirmă că avertismentul ownCloud a dispărut.
Monitorizați memoria RAM a gazdei și memoria swap înainte de a crește limita peste 512 MB.
Concluzie
Soluția completă pentru eroarea „Limita de memorie PHP sub valoarea recomandată” în ownCloud 10 este de a face ca runtime-ul PHP care deservește efectiv ownCloud să utilizeze o limită de 512 MB sau mai mare, apoi de a verifica rezultatul din același runtime. Cea mai frecventă eroare este editarea /etc/php/.../cli/php.iniîn timp ce ownCloud rulează prin PHP-FPM sau Apache cu un fișier de configurare diferit.
Opriți-vă după ce avertismentul a dispărut, operațiunile de rutină sunt sănătoase, iar gazda are un spațiu de memorie confortabil. Dacă PHP încă consumă 512 MB în timpul unei anumite operațiuni, treceți de la „creșterea numărului” la diagnosticarea sarcinii de lucru: inspectați comanda eșuată, aplicațiile, jurnalele, concurența și memoria RAM fizică. O limită mai mare poate fi potrivită, dar numai atunci când sarcina de lucru o justifică și serverul o poate suporta în siguranță.