Risolvere il problema "Limite di memoria PHP inferiore al valore consigliato" in ownCloud 10

Il risultato desiderato non è semplicemente la scomparsa dell'avviso. Una soluzione corretta implica che il processo PHP che gestisce ownCloud 10 segnali un limite di memoria di almeno 512 MB, che l'avviso di amministrazione di ownCloud scompaia, che anche i processi pianificati o eseguiti da riga di comando utilizzino un limite appropriato e che l'host disponga ancora di memoria fisica sufficiente per eseguire PHP, il server web, il database e i processi in background senza un eccessivo utilizzo dello swap.

Per ownCloud Classic 10.16, l'ambiente Docker ufficiale utilizza OWNCLOUD_MEMORY_LIMIT=512Mcome predefinito consigliato. La documentazione di ownCloud distingue anche la configurazione PHP utilizzata dal server web da quella utilizzata da php-cli. Tale distinzione è il motivo principale per cui gli amministratori a volte modificano memory_limit, riavviano un servizio e continuano a visualizzare lo stesso avviso.

Questa guida inizia con i controlli meno invasivi, per poi mostrare i percorsi di Apache, PHP-FPM, CLI e Docker. Spiega inoltre quando è giustificato aumentare ulteriormente il limite e quando il vero problema è la RAM insufficiente dell'host piuttosto che l'impostazione PHP stessa.

Che aspetto ha il successo

ControlloBuon risultatoSe fallisce
Panoramica amministrativa di ownCloudNessun avviso "Limite di memoria PHP inferiore al valore consigliato"Probabilmente hai modificato la configurazione PHP sbagliata oppure non hai riavviato il servizio corretto.
Ambiente di runtime Web PHPmemory_limitmostra 512M o superioreIndividua il file di configurazione caricato utilizzato dalla richiesta web.
Ambiente di runtime CLI/cronphp -r 'echo ini_get("memory_limit");'mostra il valore previstophp.iniModifica anche le impostazioni specifiche della CLI .
memoria hostRAM disponibile a sufficienza; pressione di swap minima o nulla.Non continuare ad aumentare i limiti di PHP indiscriminatamente. Rivaluta il numero di worker PHP o le dimensioni dell'host.
RegistriNessun errore ricorrente del tipo "Memoria consentita esaurita".Prima di aumentare nuovamente il limite, individua il carico di lavoro che sta consumando memoria.

1. Conferma l'avviso e il valore rilevato da ownCloud

Panoramica dell'amministratore di ownCloud 10 che mostra un avviso che il limite di memoria PHP è inferiore al valore consigliato e un limite di 128 MB
Parti dal valore visibile a ownCloud stesso. Un limite di runtime web di 128 MB o 256 MB è inferiore al valore di 512 MB utilizzato dalla configurazione Docker consigliata da ownCloud.

Apri le impostazioni di amministrazione di ownCloud e prendi nota dell'avviso relativo al limite di memoria. Prima di apportare qualsiasi modifica, annota la versione di ownCloud, la versione di PHP, il tipo di server web e il limite di memoria corrente. Questo ti fornirà un punto di riferimento e ti aiuterà a evitare di modificare l'installazione errata di PHP su sistemi con più versioni di PHP.

La documentazione attuale di ownCloud 10.16 afferma che i requisiti del server dipendono fortemente dal numero di utenti, dal numero di file e dall'attività. La sua configurazione Docker imposta OWNCLOUD_MEMORY_LIMIT=512Me raccomanda di mantenere questo valore predefinito. Ciò rende 512 MB una base di riferimento ragionevole per risolvere l'avviso, ma non una garanzia che ogni carico di lavoro rientri in 512 MB.

Riferimenti ufficiali: raccomandazioni per la distribuzione di ownCloud e variabili d'ambiente Docker di ownCloud .

2. Non fidarti del valore CLI per rappresentare il server web

Terminale Ubuntu che mostra php -i e php --ini con un limite di memoria CLI di 128 MB e il percorso CLI php.ini
php --iniQuesto report mostra la configurazione per PHP CLI. Tale configurazione può differire da quella utilizzata da Apache o PHP-FPM per il funzionamento di ownCloud.

Esegui questi comandi per vedere cosa utilizza il processo PHP da riga di comando:

php --ini
php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Questo è utile per occi processi cron, ma non è una prova di ciò che viene utilizzato dalla richiesta web. ownCloud documenta esplicitamente percorsi di configurazione separati come:

/etc/php/<version>/apache2/php.ini
/etc/php/<version>/fpm/php.ini
/etc/php/<version>/cli/php.ini

Se la CLI indica 512M mentre la pagina di amministrazione continua a segnalare un errore, tale discrepanza è un chiaro segnale che il server web sta caricando un altro file php.ini.

Consulta le note di configurazione PHP di ownCloud , che avvertono specificamente che potrebbe essere necessario modificare le impostazioni PHP in più di un file INI.

3. Individua la configurazione PHP utilizzata dalla richiesta web

Pagina phpinfo del browser che mostra il file di configurazione PHP-FPM caricato e un limite di memoria di 128 MB accanto a un terminale che mostra la configurazione della CLI.
Confronta l'esecuzione PHP del browser con l'esecuzione della riga di comando (CLI). Il file di configurazione caricato nel browser è quello rilevante per l'avviso web di ownCloud.

Il test più affidabile consiste nell'esaminare il codice PHP dallo stesso stack web che ospita ownCloud. La documentazione di ownCloud descrive l'utilizzo di una phpinfo.phppagina temporanea:

<?php phpinfo(); ?>

Posizionalo temporaneamente nella directory principale del sito web, aprilo in un browser e individua:

  • File di configurazione caricato
  • limite_di_memoria
  • API del server

Eliminate quindi immediatamente il file phpinfo . ownCloud avverte che lasciare una pagina phpinfo pubblica espone informazioni sensibili del server.

Se il browser dice /etc/php/7.4/fpm/php.inimentre php --inidice /etc/php/7.4/cli/php.ini, ora sai esattamente perché la modifica del file CLI non ha eliminato l'avviso.

4. PHP-FPM: aumentare il limite di web-runtime a 512M

Editor Nano aperto su un file php.ini di PHP-FPM con memory_limit impostato a 512M
Per una configurazione Nginx o Apache che utilizza PHP-FPM, è necessario modificare l'FPM php.inio l'override del pool/sito applicabile, non solo il file CLI.

In una tipica installazione di Debian o Ubuntu:

sudo nano /etc/php/7.4/fpm/php.ini

Trovare:

memory_limit = 128M

e modificarlo in:

memory_limit = 512M

Utilizza la versione di PHP installata nel percorso. Quindi riavvia il servizio FPM corretto e il tuo server web, se necessario:

sudo systemctl restart php7.4-fpm
sudo systemctl reload nginx

Per Apache con proxy_fcgio un'altra configurazione FPM, riavviare PHP-FPM e ricaricare Apache.

ownCloud nota inoltre che PHP-FPM non utilizza le impostazioni PHP da .htaccess. Se ti affidi alle sovrascritture per directory con FPM, utilizza il meccanismo di configurazione PHP/FPM supportato per il tuo ambiente, come l'apposita php.iniconfigurazione del pool o .user.ini.

5. Apache con mod_php: modifica la configurazione PHP di Apache

L'editor Nano mostra il limite di memoria impostato a 512 MB nel file php.ini di Apache, seguito da un comando di riavvio di Apache.
Con Apache mod_php, modifica la configurazione PHP specifica di Apache e riavvia Apache in modo che i nuovi processi worker carichino il nuovo limite.

Se Apache carica PHP direttamente come modulo, modifica il file specifico di Apache:

sudo nano /etc/php/7.4/apache2/php.ini

Impostato:

memory_limit = 512M

Quindi riavvia Apache:

sudo systemctl restart apache2

Non copiare meccanicamente il numero di versione. Verifica la versione effettivamente caricata da Apache. I sistemi aggiornati attraverso diverse versioni di PHP spesso mantengono più directory in /etc/php/.

Il criterio di verifica è semplice: dopo il riavvio, l'ambiente di runtime PHP lato web deve mostrare il nuovo valore. Se continua a mostrare 128M, significa che un altro livello di configurazione sta sovrascrivendo la modifica.

6. Aggiorna il limite della CLI quando occ o cron utilizzano troppa poca memoria

L'avviso web di amministrazione è gestito dal runtime web, mentre occi processi cron utilizzano PHP CLI. La documentazione di ownCloud lo specifica esplicitamente.

Modificare:

sudo nano /etc/php/7.4/cli/php.ini

Impostato:

memory_limit = 512M

Quindi verifica:

php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Non è necessario riavviare un servizio per PHP da riga di comando, perché ogni invocazione da riga di comando avvia un nuovo processo. Tuttavia, se il tuo job cron richiama esplicitamente un altro eseguibile PHP, verifica esattamente quale sia /usr/bin/phpquello in uso, invece di presumere che sia quello predefinito.

ownCloud raccomanda di eseguirlo occcome utente HTTP, in genere www-datasu Debian/Ubuntu. La sua documentazione ufficiale occ avverte inoltre che, occquando sono installate più versioni, è necessario utilizzare la stessa versione di PHP del server web.

7. Docker: utilizzare OWNCLOUD_MEMORY_LIMIT anziché modificare i file all'interno del container

File Docker Compose che mostra OWNCLOUD_MEMORY_LIMIT impostato a 512M e il container ownCloud in fase di ricreazione.
Per il container ufficiale di ownCloud, configura OWNCLOUD_MEMORY_LIMIT=512Ml'ambiente del container e ricrea il servizio in modo che la configurazione PHP generata venga aggiornata.

Per l'immagine Docker ufficiale di ownCloud, utilizzare la variabile d'ambiente documentata:

environment:
  OWNCLOUD_MEMORY_LIMIT: 512M

Quindi ricrea il servizio:

docker compose up -d

Non apportare la correzione principale modificando php.iniall'interno di un container temporaneo. La ricreazione del container potrebbe annullare tali modifiche. La documentazione ufficiale dell'ambiente Docker di ownCloud definisce OWNCLOUD_MEMORY_LIMIT=512Me raccomanda di mantenere questa impostazione predefinita.

Se l'host Docker stesso ha un limite di memoria restrittivo, controlla anche i vincoli del container:

docker stats

Un limite PHP di 512 MB non assegna magicamente al container 512 MB di memoria libera; consente solo a una singola richiesta PHP di consumare fino a tale quantità. Il container e l'host necessitano comunque di memoria sufficiente per tutti i processi PHP simultanei e gli altri servizi.

8. Riavvia il servizio corretto e verifica dallo stesso runtime

Il terminale riavvia PHP-FPM e Nginx e una panoramica di ownCloud mostra il limite di memoria PHP a 512 MB con controlli superati
La correzione è completa solo quando il runtime web segnala 512 MB o più e ownCloud non mostra più l'avviso di memoria insufficiente.

Dopo aver riavviato il servizio in questione, ricontrolla la pagina temporanea phpinfo o la panoramica amministrativa di ownCloud. Quindi elimina la pagina phpinfo.

Se hai modificato PHP-FPM, controlla:

sudo systemctl status php7.4-fpm
sudo systemctl status nginx

Se hai modificato Apache:

sudo systemctl status apache2

Aggiorna la pagina di amministrazione di ownCloud. L'avviso dovrebbe scomparire se ownCloud ora viene eseguito almeno al limite previsto.

9. Verificare la RAM del sistema host prima di aumentare il limite PHP oltre i 512 MB.

Terminale Ubuntu che mostra la memoria libera, i processi worker di PHP-FPM e le voci recenti del registro di ownCloud.
Dopo aver aumentato il limite per richiesta, verifica la memoria di sistema totale e il comportamento dei worker PHP. Un limite PHP più elevato può aumentare il consumo di RAM nel caso peggiore quando sono attivi molti worker.

Correre:

free -h
ps aux | grep php-fpm
vmstat 1

Il memory_limitlimite di memoria PHP è un valore massimo per ogni script. Non si tratta di una prenotazione e non corrisponde alla quantità di RAM necessaria al server. Se si hanno 20 processi PHP in esecuzione e si concede a ogni richiesta l'autorizzazione a utilizzare una quantità di memoria molto elevata, nel caso peggiore teoricamente la RAM richiesta potrebbe superare di gran lunga la RAM disponibile sulla macchina.

La documentazione di ottimizzazione di ownCloud fornisce lo stesso avvertimento generale per i processi del server web: dimensionare il numero di processi in modo che l'utilizzo complessivo della memoria rimanga al di sotto della RAM disponibile, altrimenti il ​​sistema inizia a utilizzare lo swap e le prestazioni diminuiscono. Consultare la guida all'ottimizzazione di ownCloud Classic .

Se l'avviso relativo al limite di 512 milioni di unità è scomparso e le normali operazioni procedono senza intoppi, non c'è motivo di aumentare il limite solo per far sì che il numero diventi più elevato.

10. Quando 512 MB continua a produrre il messaggio "Memoria massima consentita esaurita"

Un avviso di raccomandazione cancellata e un arresto anomalo per esaurimento della memoria sono problemi diversi. Se i log contengono messaggi come:

PHP Fatal error: Allowed memory size of ... bytes exhausted

Identifica l'operazione che lo innesca. Scansioni di grandi dimensioni, processi di crittografia, operazioni su storage esterno, elaborazione di immagini o un'applicazione di terze parti possono avere profili di memoria molto diversi.

Controlla il log di ownCloud e il log degli errori del server PHP/web. Un'installazione standard di ownCloud scrive il proprio log nella directory dei dati configurata, solitamente data/owncloud.log. Evita di considerare "aumentare a 1 GB" come il passaggio successivo automatico. Prima verifica se la stessa operazione raggiunge ripetutamente il limite massimo.

Se un processo amministrativo noto necessita effettivamente di più memoria, un override mirato tramite riga di comando può essere più sicuro rispetto all'imposizione di un limite elevato a tutte le richieste web a livello globale:

php -d memory_limit=1G occ <command>

Utilizzare questa soluzione solo se si conoscono il funzionamento del comando e il comportamento della memoria. Non risolve i problemi relativi alle richieste web eseguite tramite PHP-FPM o Apache.

Perché l'avviso potrebbe persistere dopo la modifica del file php.ini

SintomoProbabile causaControllo successivo
php -rmostra 512 milioni, ownCloud mostra ancora 128 milioniHai modificato solo CLIPHControlla il browser tramite phpinfo e il relativo file di configurazione caricato.
Il file FPM indica 512 MB, ma il browser continua a mostrare 128 MB.Pool, .user.ini, o un altro file INI lo sovrascriveEsamina i valori "local" e "master" di phpinfo e gli eventuali file INI aggiuntivi analizzati.
Il valore cambia solo dopo il riavvio.Il servizio corretto non è stato riavviato.Riavviare esplicitamente PHP-FPM o Apache dopo la modifica.
Il valore di Docker torna alla vecchia impostazione dopo la ricreazioneHai modificato all'interno del contenitoreImpostabile OWNCLOUD_MEMORY_LIMITin Compose o nell'ambiente di distribuzione.
L'avviso scompare ma il server inizia lo scambioLa concorrenza PHP supera la memoria hostRidurre il numero di operatori, ottimizzare il carico di lavoro o aumentare la RAM.

Non confondere memory_limit con i limiti di caricamento

memory_limit, upload_max_filesize, e post_max_sizerisolvono problemi diversi. L'aumento della memoria PHP non consente automaticamente agli utenti di caricare file più grandi. Le note di configurazione di ownCloud 10.16 affermano separatamente che post_max_sizedovrebbe essere configurato ad almeno 512 MB per il minimo documentato e spiegano che i limiti di caricamento necessitano di impostazioni proprie.

Se il sintomo effettivo è "i caricamenti di grandi dimensioni non riescono", controlla upload_max_filesizei post_max_sizelimiti di dimensione del corpo del proxy/server web, i timeout e la capacità del disco temporaneo. Non utilizzare un valore più alto memory_limitcome sostituto di questi controlli.

Lista di controllo finale

  • Verifica l'avviso e il valore corrente in ownCloud.
  • Verificare se ownCloud utilizza Apache mod_php o PHP-FPM.
  • Individua il file di configurazione caricato del runtime web .
  • Imposta il PHP web memory_limitalmeno a 512M.
  • Aggiorna anche PHP da riga di comando se occcron utilizza un limite inferiore.
  • Per Docker, impostare OWNCLOUD_MEMORY_LIMIT=512Mnell'ambiente di distribuzione.
  • Riavvia o ricrea il servizio che gestisce PHP.
  • Verifica il valore dall'ambiente di runtime web, non solo dalla riga di comando.
  • Verifica che l'avviso di ownCloud sia scomparso.
  • Monitorare la RAM e lo swap dell'host prima di aumentare il limite oltre i 512 MB.

In conclusione

La soluzione definitiva per il problema "Limite di memoria PHP inferiore al valore consigliato" in ownCloud 10 consiste nell'impostare il runtime PHP che gestisce ownCloud su un limite di 512 MB o superiore, e quindi verificare il risultato dallo stesso runtime. L'errore più comune si verifica quando si modifica il file di configurazione /etc/php/.../cli/php.inidi ownCloud mentre è in esecuzione tramite PHP-FPM o Apache con un file di configurazione diverso.

Interrompere l'operazione una volta scomparso l'avviso, quando le operazioni di routine sono corrette e l'host dispone di una memoria sufficiente. Se PHP continua a consumare 512 MB durante una specifica operazione, passare dalla fase di "aumento del limite" alla diagnosi del carico di lavoro: esaminare il comando che causa l'errore, le applicazioni, i log, la concorrenza e la RAM fisica. Un limite maggiore può essere appropriato, ma solo quando il carico di lavoro lo giustifica e il server è in grado di supportarlo in sicurezza.

Lascia un commento

Ingresso vs. Uscita: qual è la differenza nelle reti?

Ingresso vs. Uscita: qual è la differenza nelle reti?

Comprendere come i termini "ingress" e "egress" descrivono il traffico in entrata e in uscita, perché la direzione dipende dal confine della rete e come monitorare la larghezza di banda e individuare i trasferimenti di dati rischiosi.

6 migliori server Syslog gratuiti da provare per la registrazione centralizzata dei log

6 migliori server Syslog gratuiti da provare per la registrazione centralizzata dei log

Confronta sei server e collettori syslog gratuiti per Windows e Linux, inclusi strumenti con interfaccia grafica, opzioni open source, funzionalità di ricerca, avvisi e trasporto sicuro.

Cos'è IIS? Il server Web Windows di Microsoft e le sue alternative.

Cos'è IIS? Il server Web Windows di Microsoft e le sue alternative.

Scopri cosa fa Microsoft IIS, come funzionano la sua pipeline di richieste e i pool di applicazioni e quando Apache, NGINX o Caddy potrebbero essere più adatti alle tue esigenze di server web.

Risolvere l'elevato utilizzo della CPU in Jitsi Meet sui browser client.

Risolvere l'elevato utilizzo della CPU in Jitsi Meet sui browser client.

Diagnostica i picchi di utilizzo della CPU del browser Jitsi Meet e riduci il carico del client controllando i riquadri video, gli effetti della fotocamera, la grafica del browser e le impostazioni dell'host.

Come monitorare le metriche di Jitsi Videobridge con Prometheus e Grafana

Come monitorare le metriche di Jitsi Videobridge con Prometheus e Grafana

Monitora lo stato di salute, il carico della conferenza e il traffico di Jitsi Videobridge con il suo endpoint Prometheus integrato, quindi esplora e visualizza i dati in Grafana.

Come configurare un nome di dominio personalizzato per Jitsi Meet Docker

Come configurare un nome di dominio personalizzato per Jitsi Meet Docker

Configura un dominio personalizzato per Jitsi Meet Docker con DNS, URL pubblico, HTTPS, Let's Encrypt, porte del firewall, impostazioni NAT e verifica end-to-end.

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 errors after SSL renewal by checking the correct URL and port, proxy routing, service status, deployed certificates, and logs.

Risolvere l'avviso di Nextcloud "PHP OPcache non è configurato correttamente".

Risolvere l'avviso di Nextcloud "PHP OPcache non è configurato correttamente".

Scopri come diagnosticare e risolvere l'avviso di configurazione di PHP OPcache di Nextcloud controllando l'SAPI PHP attivo, i limiti di dimensionamento, i commenti e le impostazioni di riconvalida.

Risolvere gli errori di migrazione del database Kopano dopo un aggiornamento della versione di MySQL

Risolvere gli errori di migrazione del database Kopano dopo un aggiornamento della versione di MySQL

Risolvere i problemi di migrazione del database Kopano dopo un aggiornamento di MySQL o MariaDB verificando i backup, le versioni del server, le modalità SQL, il set di caratteri, lo stato dello schema e i log.

Come configurare l'autenticazione LDAP e Active Directory in Nextcloud

Come configurare l'autenticazione LDAP e Active Directory in Nextcloud

Collega Nextcloud a LDAP o Active Directory con trasporto sicuro, filtri per utenti e gruppi, attributi di accesso e un'implementazione collaudata.