Servidor Ubuntu 16.04: aumentar o limite de memória do PHP
Para aumentar o limite de memória do PHP executando como módulo do Apache no Ubuntu 16.04, altere o valor memory_limit no arquivo PHP php.ini correspondente, depois reinicie o Apache e verifique o valor aplicado em uma solicitação web. Como o PHP-FPM ou o PHP CLI podem usar arquivos de configuração diferentes, é necessário verificar primeiro o método de execução.
Escopo de aplicação e verificação antes da alteração
Este artigo é um exemplo de inspeção de um servidor existente baseado em PHP 7.0 e no módulo Apache no Ubuntu 16.04. O suporte de segurança geral para o Ubuntu 16.04 terminou, e após a manutenção de segurança estendida, pode ser aplicado um suporte legado separado. Verifique o escopo de aplicação em Cronograma de manutenção de segurança do Ubuntu e planeje a migração para um ambiente suportado.
memory_limit é uma configuração que limita a memória que um script PHP pode alocar. Não é a memória máxima da memória física instalada no servidor, nem a memória total compartilhada por múltiplas requisições. O aumento do limite pode aumentar a carga de memória do servidor dependendo do número de requisições simultâneas, então verifique tanto a memória disponível quanto os erros reais. O valor padrão pode variar dependendo das configurações do PHP e da aplicação.
Encontrando configurações do PHP usadas na web
Na instalação básica do módulo Apache do PHP 7.0 no Ubuntu 16.04, /etc/php/7.0/apache2/php.ini é usado. No entanto, o caminho pode variar dependendo da versão do PHP, do método de instalação e de configurações separadas. O PHP-FPM geralmente usa um fpm/php.ini separado, e você não deve assumir que o resultado php --ini do comando de linha de comando corresponde às configurações para uma solicitação web.
Em um ambiente de teste restrito, crie um arquivo PHP temporário no diretório de documentos web e insira o código abaixo. Abra o arquivo em um navegador para verificar o método de execução, o caminho do arquivo de configuração e o limite atual. Não o coloque em um ambiente público, pois informações do servidor, como caminhos de arquivos, serão expostas, e o exclua imediatamente após a verificação.
<?php
header('Content-Type: text/plain; charset=UTF-8');
echo 'SAPI: ' . PHP_SAPI . "\n";
echo 'Loaded ini: ' . php_ini_loaded_file() . "\n";
echo 'memory_limit: ' . ini_get('memory_limit') . "\n";
Se for apache2handler, ele usa o método do módulo Apache, e se for fpm-fcgi, ele usa o método PHP-FPM. Se o arquivo de configuração não aparecer ou for diferente do que você espera, verifique a instalação e a conexão com o servidor web. O PHP pode ler arquivos .ini adicionais além do arquivo padrão e valores podem ser substituídos pelas configurações da aplicação ou do servidor. Para mais detalhes, consulte a documentação do arquivo de configuração do PHP.
Modificando memory_limit
O seguinte é um exemplo quando o caminho verificado na web é /etc/php/7.0/apache2/php.ini. Se for um caminho diferente, aplique-o ao arquivo que você realmente verificou. Antes de editar, certifique-se de que ainda não exista um arquivo de backup e, se houver, altere o nome do backup no comando abaixo para um nome novo.
sudo cp -a -n /etc/php/7.0/apache2/php.ini /etc/php/7.0/apache2/php.ini.before-memory-limit
sudo nano /etc/php/7.0/apache2/php.ini
Encontre as configurações memory_limit existentes no editor, altere-as para os valores necessários e salve. Por exemplo, se o valor existente for 128M e você perceber que é necessário mais para a tarefa, você pode tentar 256M. Os valores a seguir são exemplos e não são valores recomendados adequados para todos os servidores.
memory_limit = 256M
O valor -1 remove o limite; não o use indiscriminadamente para resolver problemas. A causa da falta de memória pode ser entrada grande, código ineficiente ou requisições simultâneas. O significado dos valores pode ser encontrado na descrição PHP memory_limit.
Aplique no Apache e verifique
No método do módulo Apache, primeiro execute uma verificação de configuração. Syntax OK deve aparecer para prosseguir para a próxima etapa. Se a verificação falhar, resolva os erros e então verifique novamente. Esta verificação valida a configuração do Apache e não garante que os limites do PHP sejam aplicados corretamente nas requisições web.
sudo apache2ctl configtest
Se a verificação tiver sucesso, reinicie o Apache em um momento adequado. Reiniciar pode afetar conexões e requisições em andamento, então revise o impacto no ambiente de produção.
sudo systemctl restart apache2
sudo systemctl status apache2
Verifique se o serviço está operando normalmente e faça a requisição do arquivo de verificação PHP de acesso restrito criado anteriormente para ver se memory_limit mostra o valor pretendido. Após a verificação, exclua o arquivo temporário. Além disso, assegure-se de que os erros não ocorram novamente na aplicação real.
No caso do PHP-FPM, simplesmente atualizar os arquivos do módulo Apache mencionados acima e reiniciar pode não aplicar as configurações do FPM. Verifique o arquivo de configuração FPM realmente carregado e o nome do serviço em uso, e siga o procedimento de verificação de configuração e reinício para esse serviço.
Quando não for aplicado ou ocorrerem problemas
Se o valor verificado na web for diferente, verifique se o caminho editado, a versão do PHP e o método de execução estão corretos. O valor também pode diferir em arquivos .ini adicionais, configurações do Apache, configurações do pool FPM e no ini_set() da aplicação. Se ocorrerem erros de memória mesmo após as alterações, é necessário analisar juntos o log de erros, os detalhes do trabalho e o uso de memória do servidor.
Se você precisar reverter as alterações, verifique o conteúdo dos arquivos de configuração salvos e restaure-os nos arquivos originais, depois execute novamente a verificação da configuração do Apache e o reinício do serviço. Se o caminho do backup for diferente do exemplo, use o caminho de backup real. Você também pode manter separadamente a configuração atual antes da restauração para comparar as alterações.




