Come appare il messaggio
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/html/wp-includes/class-wp-image-editor-imagick.php on line 612Cause frequenti
memory_limitè troppo basso per il compito: ridimensionare immagini grandi, un'importazione grossa, Composer, un plugin pesante.- Un ciclo o una query carica troppi dati in memoria in una volta sola.
- Una perdita di memoria in uno script o worker che gira a lungo.
- Il limite è stato alzato nel
php.inisbagliato: CLI e PHP-FPM leggono file diversi. - Un'impostazione del pannello o del pool sovrascrive il valore globale.
Verifica
- Quale php.ini usa la riga di comando e qual è il limite?
php --ini; php -r 'echo ini_get("memory_limit"), PHP_EOL;' - Dove è impostato memory_limit per FPM?
grep -rn 'memory_limit' /etc/php/*/fpm/ - Quale riga è fallita? Leggi il log
grep -i 'memory size' /var/log/nginx/error.log /var/log/php8.3-fpm.log | tail -n 10
Soluzione
- Alza il limite nel file che usa PHP-FPM, ad esempio
memory_limit = 512Min/etc/php/8.3/fpm/php.ini, poisystemctl reload php8.3-fpm. - Per singolo pool imposta
php_admin_value[memory_limit] = 512Mnel file del pool. - Su un pannello come Plesk cambia il valore nelle impostazioni PHP del dominio.
- Per Composer esegui una volta
COMPOSER_MEMORY_LIMIT=-1 composer install. - Se lo script continua a crescere, risolvi la causa: elabora i dati a blocchi, libera le variabili grandi, non caricare intere tabelle.
Domande frequenti
memory_limit = -1 (illimitato) è una buona idea?
Non per le richieste web. Una richiesta difettosa può consumare tutta la RAM e bloccare il server. Meglio un valore fisso, abbastanza grande per il compito legittimo più pesante.
Ho cambiato php.ini ma non è cambiato nulla.
Probabilmente hai modificato il file della CLI oppure PHP-FPM non è stato ricaricato. Controlla quale file è caricato e ricarica il servizio.