Corrigir “Allowed memory size exhausted”

PHP e Programação·· 284 visualizações· 3 min de leitura

A mensagem completa diz “Allowed memory size of … bytes exhausted (tried to allocate … bytes)”. Significa que um único pedido tentou usar mais memória do que o memory_limit do PHP deixa. A correção rápida é subir esse valor; a correção de verdade é saber quem a gastou.

Descobrir quem gastou

No fim da mensagem vem um caminho e um número de linha. Esse caminho responde à pergunta mais depressa do que qualquer palpite.

O caminho aponta para… Quer dizer O que fazer
wp-content/plugins/nome Um plugin está gastando demais, normalmente numa tarefa pesada (cópias, importação, relatórios). Suba o limite para a tarefa acabar, e depois veja se há versão nova ou alternativa mais leve.
wp-content/themes/nome O tema ou um construtor de páginas a carregar muito. Suba o limite. Se continua faltando, o tema é pesado para o plano.
Arquivos de imagem (gd, imagick) Uma fotografia enorme a ser processada. Reduza a imagem antes de a enviar. O gasto cresce com as dimensões, não com o peso do arquivo.
Código seu, sempre no mesmo lugar Um ciclo que não acaba, ou uma lista inteira carregada de uma vez. Aqui subir o limite só adia o erro. Corrija o código.

Subir o limite

1 No cPanel abra Select PHP Version, escolha a versão que o site usa e abra a aba Options.
2 Procure memory_limit e escolha um valor acima do atual, um degrau de cada vez.
3 Se só uma aplicação precisa, ponha antes um .user.ini na pasta dela com uma linha como memory_limit = 256M (exemplo). Veja onde pôr cada valor.
4 No WordPress há ainda o limite do próprio WordPress, que se muda no wp-config.php. Veja dar mais memória ao WordPress.
5 Repita a ação que dava o erro. Se passar, pare aqui.

Para confirmar que o valor novo está em vigor, abra um arquivo com <?php phpinfo(); na pasta do site e procure memory_limit: a coluna Local Value é a que conta. Se o número não mudou, foi gravado no lugar errado, ou o site roda em outra versão do PHP. E antes de subir muito o limite, experimente desativar os plugins um a um e repetir a ação: se o erro desaparece com um deles desligado, o problema não era o limite.

O memory_limit não é a memória da sua conta. É o tecto por pedido. A conta tem os seus próprios limites de memória e de processos, e se o pedido os ultrapassar o resultado é um erro 500 ou 508 e não uma subida de limite. Veja os limites que ninguém anuncia e os erros do site explicados.
Se a mensagem só aparece numa tarefa pesada (importar, exportar, gerar cópias), considere rodar essa tarefa por linha de comandos ou por cron, onde não há requisição web. Veja rodar um script PHP numa tarefa agendada.

Subiu o limite e a mensagem volta? Envie-nos a mensagem inteira, com o caminho e a linha.

Abrir um pedido de suporte

VEJA TAMBÉM

Os limites do PHP: memória, tempo e tamanho de upload

php.ini e .user.ini: onde pôr cada valor

Dar mais memória ao WordPress

Os limites que ninguém anuncia

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde R$ 36,30/mês (plano de 3 anos, com cupom)

Ver planos
Esta resposta foi útil? Sua resposta nos ajuda a melhorar este artigo.