Como identificar problemas de limite de memória PHP no PrestaShop

Sua lista de produtos carrega em uma página em branco. Uma importação falha na linha 4,300 e falha novamente na linha 4,300 na próxima tentativa. Uma foto é carregada sem problemas, mas nunca gera uma miniatura. Três pessoas relatam três problemas diferentes, e a causa subjacente a todos eles é a mesma.

A causa é a memória. Até que algo quebre, a maioria dos donos de lojas nunca verifica essa configuração e, quando ela quebra, a configuração acaba sendo culpada por diversos problemas que nunca causou.

O texto a seguir aborda como identificar problemas de limite de memória PHP no PrestaShop, como confirmar se esse é o problema e o que fazer em seguida. Algumas informações você pode verificar por conta própria; as demais devem ser enviadas ao seu provedor de hospedagem.

1.0 O que é, de fato, o limite de memória do PHP

O PrestaShop é escrito em PHP. Sempre que alguém carrega uma página, um script é executado para construí-la, e o parâmetro `memory_limit` limita a quantidade de memória que esse script pode usar.

Esse limite se aplica a um único script, não a todo o seu site nem a todo o seu servidor, e quase toda a confusão aqui se deve a essa distinção. 

O manual do PHP menciona que o valor padrão de memory_limit é 128 MB.

Portanto, um servidor com 16 GB de RAM ainda pode falhar com 128 MB. Ninguém está mentindo sobre o hardware: o PHP impõe um limite próprio, muito abaixo do que a máquina permitiria, e interrompe o script assim que esse limite é atingido. Muita memória livre junto com uma mensagem de memória esgotada do PrestaShop é uma combinação comum, e um erro de memória esgotada do PHP no PrestaShop significa o mesmo.

Existem dois tetos, e o que estiver mais baixo é o que você atinge. Deixe as configurações do PHP como estão e adicione RAM: nada melhora. Daí a decepção quando "basta atualizar o plano de hospedagem" se mostra ineficaz.

2.0 Plano de hospedagem em relação ao limite de memória do servidor PrestaShop

Lado a lado, a diferença fica mais clara:

O que é issoO que isso limitaValor típicoQuem o altera?
limite de memória do PHPCarregamento de uma página128 MB a 512 MBVocê ou seu host, em um arquivo de configuração
RAM do servidorTudo funcionando2 GB a 32 GBSeu plano de hospedagem

Ambos os problemas são importantes, e a forma como ocorrem indica qual deles você tem. Se o limite de PHP for atingido, uma página quebra enquanto a loja continua atendendo os clientes. Se a memória RAM acabar, tudo fica lento de uma vez, incluindo o banco de dados. Um site lento aponta para problemas de RAM ou tráfego; uma página quebrada enquanto o restante funciona indica que o problema está neste artigo.

3.0 Por que a loja PrestaShop fica sem memória?

Existe uma resposta real para o motivo pelo qual o PrestaShop fica sem memória, e "o software está inchado" não é essa resposta. Administrar uma loja virtual envolve realizar diversas tarefas realmente pesadas que um site institucional jamais precisa executar. Quatro pontos importantes aqui.

  1. Os dados do produto são maiores do que aparentam.Cada produto traz consigo descrições em todos os idiomas em que você vende, além de regras de preços, categorias, combinações e estoque. Por si só, isso não é nada. Solicite cinco mil unidades de uma só vez durante uma exportação e os cálculos mudam rapidamente.

2. O consumo de memória das imagens é determinado pelas dimensões, não pelo tamanho do arquivo : Este fato surpreende muita gente. Abra uma foto de 3 MB com 6000 pixels de largura e ela precisará de aproximadamente 70 MB antes de qualquer redimensionamento. O tamanho do arquivo em disco dificilmente prevê o custo de processamento, e é por isso que algumas fotos recebem miniaturas enquanto outras não.

3. Todos os módulos são carregados juntos : Sua página de administração carrega e inicializa todos os módulos instalados ao entrar, incluindo os quarenta que a tela nunca acessará. Individualmente, eles custam pouco. Uma loja estabelecida utiliza sessenta módulos, e sessenta é uma questão diferente.

4. Seu painel administrativo é a parte mais pesada : mais dados na tela, menos atalhos, sem o cache que mantém a loja virtual rápida. Assim, um problema de memória PHP no PrestaShop recai sobre você e sua equipe, enquanto todos os clientes continuam navegando normalmente, tornando o problema invisível para quem paga pelo serviço.

4.0 Sintomas e mensagens de erro que vale a pena reconhecer

Ocasionalmente, a mensagem aparece na tela com a seguinte aparência:

Erro fatal: Tamanho de memória permitido de 134217728 bytes esgotado
(Tentativa de alocar 20480 bytes)

Analise os dois números separadamente. Convertendo de bytes, 134217728 resulta em 128 MB, o que significa que o armazenamento estava operando com o limite padrão e já havia utilizado toda a capacidade. É importante saber disso, pois a mensagem indica sua configuração atual.

Esse segundo número é uma pista falsa. É minúsculo, por isso parece ser o culpado, mas não é: trata-se do último recurso que solicitou memória, depois que tudo o mais já havia sido consumido. É a gota d'água, não a causa principal. A maioria dos donos de lojas rastreia erros de alocação de memória no PrestaShop encontrando esse número, e isso não os leva a lugar nenhum.

5.0 O erro de limite de memória do PrestaShop que você nunca vê.

Lojas online ocultam erros dos visitantes, e com razão. Qualquer aspecto técnico na sua loja virtual passa uma imagem pouco profissional e revela detalhes do seu servidor a estranhos. O efeito colateral recai sobre você: mesmo configurando a loja corretamente, você não verá nada de útil.

Erros ocultos dos visitantes não deixam nada para ler.

Em vez de uma mensagem, espere uma destas:

Uma página completamente branca, sem nada no navegador.

Uma página de erro HTTP 500

Meia página: a parte superior carrega, depois para com o layout quebrado.

Exportações que são baixadas e abertas corretamente, mas que apresentam linhas faltando no final.

Produtos que carregam sem problemas e nunca mostram uma miniatura.

A página em branco é clássica e a menos útil: nada para ler, nada para colar em uma caixa de pesquisa.

6.0 Garantindo que seja realmente memória

Confirme o diagnóstico antes que alguém altere alguma configuração. Vistos de fora, esses dois problemas parecem idênticos; a única diferença é que um deles envolve memória, e as soluções não têm nada em comum.

O erro dizO problema éA solução envolve
Tamanho de memória disponível… esgotadolimite de memória do PHPmemory_limit, abordado abaixo
Tempo máximo de execução… excedidoUm limite de tempo, não de memória.max_execution_time

A página fica em branco de qualquer maneira. Peça ao seu provedor de hospedagem o log de erros do PHP referente ao horário em que o problema ocorreu, pois é lá que a mensagem real é exibida quando nada é mostrado. Uma única solicitação evita muitas tentativas e erros.

7.0 Como verificar o limite de memória PHP no PrestaShop

O limite atual de memória PHP pode ser verificado no próprio painel administrativo do PrestaShop, sem necessidade de acesso ao servidor.

Acesse Parâmetros Avançados e, em seguida , Informações , onde suas configurações de PHP estão listadas, incluindo o limite de memória. O limite de memória afeta tanto a loja quanto o painel de administração. Portanto, essa é a configuração que podemos verificar primeiro.

É importante evitar uma confusão. Feeds e importações geralmente são executados durante a noite, de acordo com um cronograma, e essas tarefas frequentemente utilizam uma configuração de memória diferente da do seu site. Você vê um valor normal no painel administrativo; mesmo assim, a importação falha. Mesmo servidor, configuração diferente. Informe isso ao seu provedor de hospedagem.

8.0 Como aumentar o limite de memória PHP no PrestaShop e corrigir erros de memória esgotada

Os requisitos de sistema do PrestaShop solicitam 256 MB como mínimo, e o instalador verifica isso antes de permitir que você prossiga.

Existem várias maneiras de aumentar o limite de memória PHP nas configurações do PrestaShop. A que se aplica ao seu caso depende da configuração da sua hospedagem, e isso não é algo que você possa determinar simplesmente navegando pela sua loja. Pergunte ou verifique.

8.1 O caminho mais fácil: pergunte ao seu anfitrião

Em hospedagem compartilhada, essa geralmente é a solução completa. Muitos painéis de controle oferecem uma tela de configurações do PHP que você mesmo pode alterar; caso contrário, o suporte técnico fará isso. Em outras palavras:

Você poderia aumentar o memory_limit para 256M no meu site?
O PrestaShop precisa de no mínimo 256 MB.

Se o provedor de hospedagem recusar, teremos que procurar outras opções de hospedagem.

8.2 Se você ou seu desenvolvedor tiverem acesso ao servidor

Uma pequena linha em um arquivo chamado php.ini resolve o problema:

memory_limit = 256M

Duas coisas dão errado com frequência suficiente para merecerem atenção. Um servidor pode conter vários arquivos php.ini e ler apenas um, então uma edição perfeitamente correta pode acabar em um arquivo que ninguém consulta. A segunda é a reinicialização: em muitas configurações, nada entra em vigor até que o PHP seja reiniciado.

8.4 O método .htaccess e por que ele frequentemente não faz nada

Pesquise online e você encontrará instruções para adicionar uma linha ao arquivo .htaccess, o arquivo de configuração localizado na pasta raiz da sua loja:

php_value memory_limit 256M

Às vezes funciona. Na maioria das hospedagens modernas, não faz nada, e em algumas, o site inteiro retorna um erro 500 porque o servidor rejeita essa instrução. 

Use essa opção apenas como último recurso e somente se puder desfazer a alteração com facilidade.

Um detalhe peculiar desta plataforma é o seguinte: ao salvar as configurações de URL, o PrestaShop reescreve o arquivo .htaccess, o que significa que uma linha adicionada manualmente pode desaparecer sem aviso prévio. Verifique o arquivo novamente após alterar as configurações de SEO e URLs.

9.0 Verificando se a alteração realmente funcionou

Não acredite em ninguém, nem mesmo em você. A confirmação leva cerca de dois minutos:

Volte aos Parâmetros Avançados e, em seguida, às Informações. O número mudou? Se ainda estiver em 128 MB, significa que a alteração não surtiu efeito, o resultado mais comum.

Repita o que estava falhando antes. Se a configuração estiver definida como 256 MB e a página ainda apresentar problemas, algo mais está interferindo.

Limpe o cache do armazenamento em Parâmetros Avançados e, em seguida, em Desempenho.

Aguarde alguns dias antes de considerar o problema resolvido, pois o que retornar tende a ser proporcional ao tamanho do seu catálogo.

Quando um número se recusa a mudar, suspeite primeiro do arquivo errado e, em seguida, de um painel de controle que esteja sobrescrevendo as alterações feitas no disco com sua própria configuração.

9.2 Quando aumentar o limite é a resposta errada

Muitas vezes, essa é a resposta certa, já que 128 MB é realmente muito pouco para um painel administrativo moderno do PrestaShop. Use 256 MB sem se preocupar muito com isso.

Após 512 MB, comece a fazer uma pergunta diferente. Normalmente, a essa altura, algo está consumindo memória proporcionalmente ao seu catálogo, então cada aumento permite adicionar alguns milhares de produtos antes que o mesmo problema volte a ocorrer. Uma hora do tempo de um desenvolvedor custa menos do que um servidor maior por ano.

A forma como o problema começou pode ajudar a entender com qual situação estamos lidando. Algo que surgiu à medida que o catálogo crescia é um problema de código ou de dados disfarçado de problema de memória. Algo que começou no dia em que um módulo foi adicionado pertence a esse módulo. E um problema que sempre esteve presente, em uma loja que ainda tem 128 MB, é realmente apenas uma questão de configuração.

Conclusão final: Evite que isso aconteça novamente.

  • Consiga 256 MB e mantenha-se nesse patamar. É o mínimo comprovado, não um luxo.
  • Redimensione fotos grandes antes de publicá-las: a memória é gasta por pixel, e 2000 pixels de largura é suficiente para a maioria das lojas de imagens.
  • Desativado não é o mesmo que removido, então desinstale o que você não usa mais.
  • Agende grandes importações fora dos seus horários de pico.
  • Ensaiar uma grande importação em uma cópia de teste, nunca na versão final em que o espetáculo está sendo apresentado ao vivo.
  • Peça ao seu desenvolvedor para ler o log de erros após uma operação em lote falhar, em vez de presumir que ela funcionou corretamente.
  • Essa última opção merece destaque. Uma operação em lote incompleta é pior do que uma que falhou completamente, porque você não tem ideia de qual metade foi concluída e ler o registro leva um minuto.

Este foi o guia completo para identificar problemas de limite de memória PHP no PrestaShop. Na Knowband, somos especialistas em plugins de e-commerce, personalização de sites e desenvolvimento de aplicativos para ajudar sua loja a ter o melhor desempenho. Precisa de ajuda especializada? Entre em contato conosco pelo e-mail [email protected] ou pelo Helpdesk da Knowband. Teremos prazer em ajudar.

Deixa um comentário