Pular para o conteúdo
Configuração

Como resolver "Allowed Memory Size Exhausted" no WordPress

Se o seu site está mostrando Fatal error: Allowed memory size of 268435456 bytes exhausted, adicione esta linha ao wp-config.php acima do / That's all, stop editing! /

Publicado

Se o seu site está mostrando Fatal error: Allowed memory size of 268435456 bytes exhausted, adicione esta linha ao wp-config.php acima do comentário /* That's all, stop editing! */: define( 'WP_MEMORY_LIMIT', '256M' );. Isso coloca a maioria dos sites de volta no ar em menos de um minuto. Mas leia o resto desta página antes de sair, porque aumentar o limite é um diagnóstico, não uma cura. Se o erro voltar em um número mais alto, o problema real é código que consome memória sem limite, e um teto maior só dá mais corda pra ele.

O que o erro realmente significa

O PHP monitora quanta memória cada requisição alocou. Quando uma única requisição tenta alocar além do memory_limit definido no php.ini (ou sobrescrito pelo WordPress), o PHP mata a requisição na hora com um erro fatal e imprime a contagem de bytes em que ela morreu. 268435456 bytes é 256M. 134217728 é 128M. 536870912 é 512M. O número depois de “tried to allocate” indica o tamanho da gota d’água final, não o tamanho do problema.

O WordPress adiciona seus próprios limites em cima do PHP. O WP_MEMORY_LIMIT (padrão 40M, ou o limite do PHP se for maior) controla o front-end. O WP_MAX_MEMORY_LIMIT (padrão 256M) controla operações do lado administrativo, como a biblioteca de mídia e atualizações de plugins, que legitimamente precisam de mais. O WordPress chama ini_set('memory_limit', ...) no carregamento com base nessas constantes — mas só se a sua hospedagem permitir ini_set, e só até o teto rígido que a hospedagem define. Essa última parte é o motivo pelo qual editar o wp-config.php às vezes parece não fazer nada.

Como resolver, em ordem

1. Aumente o limite do WordPress no wp-config.php. Essa é a primeira coisa a testar porque é reversível e não mexe em mais nada.

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

Se você não tem certeza de onde essas linhas vão ou quer deixar as outras constantes comuns configuradas corretamente ao mesmo tempo, nosso guia para configurar o wp-config.php gera um bloco limpo que você pode colar. A posição importa — qualquer coisa abaixo da linha “stop editing” é ignorada.

2. Se isso não fizer nada, sua hospedagem está limitando o PHP. Aumente o memory_limit no nível do PHP. No php.ini:

memory_limit = 256M

Em muitas hospedagens compartilhadas você não consegue editar o php.ini diretamente. Tente um arquivo .user.ini na raiz do seu site, ou defina via .htaccess em uma configuração Apache/mod_php:

php_value memory_limit 256M

Observe que php_value no .htaccess gera um erro 500 em configurações com nginx ou PHP-FPM, porque é uma diretiva do Apache/mod_php. Se você levar um 500 depois de adicionar isso, é por causa disso — remova e use .user.ini.

3. Confirme o valor que está realmente ativo. Não confie no que você editou; confie no que o PHP reporta. Coloque um arquivo de uma linha na raiz do seu site:

<?php echo ini_get('memory_limit');

Carregue-o no navegador, leia o valor e depois apague o arquivo. Se ainda estiver dizendo 128M depois de você definir 256M, sua hospedagem está sobrescrevendo o valor e você precisa entrar em contato com eles ou usar a configuração no painel de controle deles.

A parte que a maioria dos guias pula

Aumentar o limite é diagnóstico. Aqui está como interpretar o resultado.

Se você definiu 256M e o site fica no ar sob tráfego normal, você tinha um teto legítimo que estava baixo demais — comum em sites com bibliotecas de mídia grandes, WooCommerce ou construtores de página. Está resolvido.

Se você definiu 256M e ele trava de novo, aí 512M e trava de novo, pare de aumentar. Uma requisição normal do WordPress não precisa de 512M. Quando o uso de memória sobe sem teto, algo está em loop ou acumulando: um plugin carregando uma tabela inteira do banco de dados em um array, um add_action que dispara a si mesmo recursivamente, uma rotina de importação segurando todas as linhas na memória de uma vez, ou dois plugins brigando dentro do mesmo hook. Aumentar o limite não conserta um loop sem fim — só empurra o travamento alguns segundos para frente e torna mais difícil reproduzi-lo.

Para achar o culpado, desative todos os plugins e troque para um tema padrão como o Twenty Twenty-Four. Se o erro parar, reative um de cada vez até ele voltar. Ative o log de depuração para pegar onde ele morre:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

A linha fatal no wp-content/debug.log indica o arquivo e o número da linha que alocou o bloco final. Geralmente é o loop, ou uma chamada de função de distância dele.

O que não fazer

Não defina WP_MEMORY_LIMIT como -1 ou 1024M e esqueça. Memória ilimitada não conserta um vazamento; ela deixa uma requisição descontrolada devorar o servidor inteiro, o que pode derrubar todos os outros sites na mesma máquina e te render uma ligação da sua hospedagem. Um teto é um recurso de segurança. Mantenha um.

Não cole ini_set('memory_limit', '512M') no functions.php como solução principal. Ele roda tarde demais para algumas falhas — se o travamento acontece durante o carregamento do núcleo do WordPress, antes do functions.php do seu tema executar, a linha nunca roda. O wp-config.php carrega mais cedo e é o lugar certo.

Não presuma que é problema de hospedagem e faça upgrade do seu plano. Às vezes é hospedagem genuinamente subdimensionada. Muitas vezes o mesmo travamento te acompanha até o plano maior porque a causa veio junto nos seus plugins. Descarte o loop primeiro; é de graça.

Não aumente o memory_limit para resolver um erro de max_execution_time. São limites diferentes com mensagens diferentes. O esgotamento de memória diz “Allowed memory size … exhausted.” Um timeout diz “Maximum execution time … exceeded.” Aumentar o errado desperdiça uma tarde inteira.

Ainda travado?

Se você confirmou que o limite ativo é genuinamente 256M ou mais, testou com todos os plugins desativados e um tema padrão, e ele ainda esgota a memória, você tem um vazamento real que vale a pena caçar no log de depuração, e não um teto que vale a pena aumentar. Capture a linha fatal, anote em qual diretório de plugin ela aponta, e esse é o seu relatório de bug. Deixe as constantes básicas do seu wp-config.php corretas primeiro com o guia para configurar o wp-config.php para saber que os limites estão definidos onde você acha que estão — depois vá ler o log.