Início
» ADMINISTRADOR DE REDE
»
Corrigir o erro “Limite de memória PHP abaixo do valor recomendado” no ownCloud 10
Corrigir o erro “Limite de memória PHP abaixo do valor recomendado” no ownCloud 10
O resultado desejado não é simplesmente "o aviso desapareceu". Uma correção adequada significa que o processo PHP que realmente executa o ownCloud 10 reporta um limite de memória de pelo menos 512 MB, o aviso do administrador do ownCloud desaparece, as tarefas agendadas ou da linha de comando também usam um limite apropriado e o host ainda tem memória física suficiente para executar o PHP, o servidor web, o banco de dados e as tarefas em segundo plano sem uso excessivo de memória virtual.
Para o ownCloud Classic 10.16, o ambiente Docker oficial usa OWNCLOUD_MEMORY_LIMIT=512Mcomo padrão recomendado. A documentação do ownCloud também distingue a configuração PHP usada pelo servidor web daquela usada pelo php-cli. Essa distinção é o principal motivo pelo qual os administradores às vezes alteram o memory_limit, reiniciam um serviço e ainda veem o mesmo aviso.
Este guia começa com as verificações menos disruptivas e, em seguida, mostra os caminhos do Apache, PHP-FPM, CLI e Docker. Também explica quando aumentar ainda mais o limite é justificado e quando o problema real é a insuficiência de RAM do host, e não a configuração do PHP em si.
Como é o sucesso?
Verificar
Bom resultado
Se falhar
Visão geral do administrador do ownCloud
Sem aviso de “Limite de memória PHP abaixo do valor recomendado”
Você provavelmente editou a configuração PHP errada ou não reiniciou o serviço correto.
Tempo de execução PHP da Web
memory_limitmostra 512M ou superior
Localize o arquivo de configuração carregado usado pela solicitação web.
CLI / tempo de execução cron
php -r 'echo ini_get("memory_limit");'mostra o valor pretendido
php.iniEdite também as configurações específicas da CLI .
Memória do host
RAM disponível suficiente; pouca ou nenhuma pressão de troca sustentada.
Não aumente os limites do PHP indiscriminadamente. Reavalie a quantidade de processos do PHP ou o tamanho do host.
Registros
Sem erros recorrentes de "Memória permitida esgotada".
Identifique a carga de trabalho que está consumindo muita memória antes de aumentar o limite novamente.
1. Confirme o aviso e o valor que o ownCloud detecta.
Comece pelo valor visível para o próprio ownCloud. Um limite de tempo de execução web de 128 MB ou 256 MB está abaixo do valor de 512 MB usado pela configuração Docker recomendada pelo ownCloud.
Abra as configurações de administração do ownCloud e observe o aviso de limite de memória. Antes de alterar qualquer coisa, anote a versão do ownCloud, a versão do PHP, o tipo de servidor web e o limite de memória atual. Isso lhe dará uma base de comparação e ajudará a evitar alterações na instalação incorreta do PHP em sistemas com várias versões do PHP.
A documentação atual do ownCloud 10.16 afirma que os requisitos do servidor dependem muito da quantidade de usuários, arquivos e da atividade. A configuração do Docker define OWNCLOUD_MEMORY_LIMIT=512Me recomenda manter esse padrão. Isso faz com que 512 MB seja uma base razoável para resolver o aviso, mas não uma garantia de que todas as cargas de trabalho caberão em 512 MB.
2. Não confie no valor da CLI para representar o servidor web.
php --iniEste relatório exibe a configuração da CLI do PHP. Essa configuração pode ser diferente da configuração do PHP usada pelo Apache ou PHP-FPM para servir o ownCloud.
Execute estes comandos para ver o que o processo PHP da linha de comando utiliza:
Isso é útil para occtarefas agendadas (cron jobs), mas não comprova o que a requisição web utiliza. O ownCloud documenta explicitamente caminhos de configuração separados, como:
Se o seu terminal indicar 512M enquanto a página de administração ainda apresentar um erro, essa discrepância é um forte indício de que o servidor web está carregando um valor diferente php.ini.
3. Encontre a configuração PHP usada pela requisição web.
Compare o ambiente de execução PHP do navegador com o ambiente de execução da CLI. O arquivo de configuração carregado no navegador é o arquivo relevante para o aviso web do ownCloud.
O teste mais confiável é inspecionar o PHP a partir da mesma pilha web que serve o ownCloud. A documentação do ownCloud descreve o uso de uma phpinfo.phppágina temporária:
<?php phpinfo(); ?>
Coloque-o temporariamente na raiz da web, abra-o em um navegador e localize:
Arquivo de configuração carregado
limite_de_memória
API do servidor
Em seguida, exclua o arquivo phpinfo imediatamente . O ownCloud alerta que deixar uma página phpinfo pública expõe informações confidenciais do servidor.
Se o navegador exibir a mensagem " /etc/php/7.4/fpm/php.iniwhile" e php --inivocê disser "" /etc/php/7.4/cli/php.ini, agora você sabe exatamente por que editar o arquivo CLI não resolveu o problema.
4. PHP-FPM: aumentar o limite de tempo de execução da web para 512 MB
Para uma configuração Nginx ou Apache usando PHP-FPM, altere o FPM php.iniou a configuração de pool/site aplicável, e não apenas o arquivo CLI.
Em uma instalação típica do Debian ou Ubuntu:
sudo nano /etc/php/7.4/fpm/php.ini
Encontrar:
memory_limit = 128M
e altere para:
memory_limit = 512M
Utilize a versão do PHP instalada no caminho. Em seguida, reinicie o serviço FPM correto e o servidor web, se necessário.
Para o Apache com proxy_fcgiFPM ou outra configuração semelhante, reinicie o PHP-FPM e recarregue o Apache.
O ownCloud também observa que o PHP-FPM não consome configurações do PHP de .htaccess. Se você depende de substituições por diretório com o FPM, use o mecanismo de configuração PHP/FPM compatível com seu ambiente, como o apropriado php.ini, configuração de pool ou .user.ini.
5. Apache com mod_php: editar a configuração do PHP no Apache
Com o Apache mod_php, edite a configuração PHP específica do Apache e reinicie o Apache para que os novos processos de trabalho carreguem o novo limite.
Se o Apache carregar o PHP diretamente como um módulo, edite o arquivo específico do Apache:
sudo nano /etc/php/7.4/apache2/php.ini
Definir:
memory_limit = 512M
Em seguida, reinicie o Apache:
sudo systemctl restart apache2
Não copie o número da versão mecanicamente. Verifique a versão realmente carregada pelo Apache. Sistemas atualizados em várias versões do PHP geralmente mantêm vários diretórios em /etc/php/.
O critério de resultado é simples: após a reinicialização, o ambiente de execução PHP voltado para a web deve exibir o novo valor. Se ainda mostrar 128M, outra camada de configuração está sobrescrevendo sua alteração.
6. Atualize o limite da CLI quando o occ ou o cron estiverem usando pouca memória.
O aviso da página de administração web é gerado pelo ambiente de execução web, mas occas tarefas cron utilizam a CLI do PHP. A documentação do ownCloud menciona isso explicitamente.
Editar:
sudo nano /etc/php/7.4/cli/php.ini
Definir:
memory_limit = 512M
Em seguida, verifique:
php -r 'echo ini_get("memory_limit"), PHP_EOL;'
Não é necessário reiniciar um serviço para o PHP via linha de comando, pois cada invocação da linha de comando inicia um novo processo. No entanto, se sua tarefa cron chamar explicitamente outro binário do PHP, verifique qual é o binário exato em vez de presumir /usr/bin/phpque seja o que está sendo usado.
O ownCloud recomenda ser executado occcomo o usuário HTTP, normalmente www-dataem Debian/Ubuntu. Sua documentação oficial também alerta que occse deve usar a mesma versão do PHP do servidor web quando várias versões estiverem instaladas.
7. Docker: use OWNCLOUD_MEMORY_LIMIT em vez de editar arquivos dentro do contêiner.
Para o contêiner oficial do ownCloud, configure OWNCLOUD_MEMORY_LIMIT=512Mo ambiente do contêiner e recrie o serviço para que a configuração PHP gerada seja atualizada.
Para a imagem Docker oficial do ownCloud, utilize a variável de ambiente documentada:
environment:
OWNCLOUD_MEMORY_LIMIT: 512M
Em seguida, recrie o serviço:
docker compose up -d
Não faça a correção principal editando php.inidentro de um contêiner efêmero. A recriação do contêiner pode descartar essas alterações. A documentação oficial do ambiente Docker do ownCloud define OWNCLOUD_MEMORY_LIMIT=512Me recomenda manter esse padrão.
Se o próprio host Docker tiver um limite de memória restrito, verifique também as restrições do contêiner:
docker stats
Um limite de 512M para PHP não concede magicamente 512 MB de memória livre ao contêiner; ele apenas permite que uma requisição PHP individual consuma até essa quantidade. O contêiner e o host ainda precisam de memória suficiente para todos os processos PHP simultâneos e outros serviços.
8. Reinicie o serviço correto e verifique a partir do mesmo ambiente de execução.
A correção só estará completa quando o ambiente de execução da web reportar 512 MB ou mais e o ownCloud não exibir mais o aviso de pouca memória.
Após reiniciar o serviço relevante, verifique novamente a página temporária do phpinfo ou a visão geral do painel de administração do ownCloud. Em seguida, remova a página do phpinfo.
Se você alterou o PHP-FPM, verifique:
sudo systemctl status php7.4-fpm
sudo systemctl status nginx
Se você alterou o Apache:
sudo systemctl status apache2
Atualize a página de administração do ownCloud. O aviso deverá desaparecer se o ownCloud estiver agora a funcionar com pelo menos o limite esperado.
9. Verifique a RAM do host antes de aumentar o limite do PHP além de 512 MB.
Após aumentar o limite por requisição, verifique a memória total do sistema e o comportamento dos processos PHP. Um limite máximo de uso de memória do PHP mais alto pode aumentar o consumo de RAM no pior cenário, quando muitos processos estão ativos.
Correr:
free -h
ps aux | grep php-fpm
vmstat 1
O PHP memory_limitimpõe um limite por script. Não se trata de uma reserva e não é o mesmo que a quantidade de RAM que o servidor precisa. Se você tiver 20 processos PHP e der permissão para que cada requisição utilize uma quantidade muito grande de memória, o pior cenário teórico pode exceder a RAM da máquina por uma grande margem.
A documentação de otimização do ownCloud traz o mesmo aviso geral para processos de servidor web: dimensione o número de processos para que o uso agregado de memória permaneça abaixo da RAM disponível; caso contrário, o sistema começará a usar a memória virtual (swap) e o desempenho cairá. Consulte as orientações de otimização do ownCloud Classic .
Se o aviso de 512M desapareceu e as operações normais estão ocorrendo sem problemas, não há motivo para aumentar o limite apenas para que o número seja maior.
10. Quando 512M ainda produz “Tamanho de memória permitido esgotado”
Um aviso de recomendação ignorado e uma falha por falta de memória são problemas diferentes. Se os registros contiverem mensagens como:
PHP Fatal error: Allowed memory size of ... bytes exhausted
Identifique a operação que desencadeia o problema. Grandes varreduras, tarefas de criptografia, operações de armazenamento externo, processamento de imagens ou um aplicativo de terceiros podem ter perfis de memória muito diferentes.
Verifique o log do ownCloud e o log de erros do PHP/servidor web. Uma instalação padrão do ownCloud grava seu próprio log no diretório de dados configurado, geralmente `/var/www/owncloud` data/owncloud.log. Evite considerar "aumentar para 1 GB" como o próximo passo automático. Primeiro, verifique se a mesma operação atinge o limite de memória repetidamente.
Se uma tarefa administrativa específica realmente precisar de mais memória, uma configuração específica na linha de comando pode ser mais segura do que atribuir um limite enorme a todas as requisições web de forma generalizada:
php -d memory_limit=1G occ <command>
Use isso somente quando o comando e o comportamento da memória forem compreendidos. Não corrige uma requisição web que passa pelo PHP-FPM ou Apache.
Por que o aviso pode permanecer após editar o php.ini?
Sintoma
Causa provável
Próxima verificação
php -rMostra 512 milhões, o ownCloud ainda mostra 128 milhões.
Você alterou apenas o PHP da CLI
Verifique o phpinfo do navegador e o arquivo de configuração carregado.
O arquivo FPM indica 512 MB, mas o navegador ainda mostra 128 MB.
Pool, .user.iniou outro arquivo INI, o substitui.
Inspecione os valores "local" e "master" do phpinfo, bem como os arquivos INI analisados adicionais.
O valor só muda após a reinicialização.
O serviço correto não foi reiniciado.
Reinicie o PHP-FPM ou o Apache explicitamente após a edição.
O valor do Docker retorna à configuração anterior após a recriação.
Você editou dentro do contêiner
Configure OWNCLOUD_MEMORY_LIMITno Compose ou no ambiente de implantação.
O aviso desaparece, mas o servidor começa a trocar dados.
A concorrência em PHP excede a memória do host.
Reduza o número de trabalhadores, otimize a carga de trabalho ou adicione RAM.
Não confunda memory_limit com limites de upload.
memory_limit, upload_max_filesize, e post_max_sizeresolvem problemas diferentes. Aumentar a memória PHP não permite automaticamente que os usuários enviem arquivos maiores. As notas de configuração do ownCloud 10.16 afirmam separadamente que post_max_sizeo limite mínimo documentado deve ser configurado para pelo menos 512 MB e explicam que os limites de upload precisam de configurações próprias.
Se o sintoma real for "falha em uploads grandes", verifique upload_max_filesizeos post_max_sizelimites de tamanho do corpo da requisição, os tempos limite e a capacidade do disco temporário do proxy/servidor web. Não use um valor maior memory_limitcomo substituto para esses controles.
Lista de verificação final
Confirme o aviso e o valor atual no ownCloud.
Identifique se o ownCloud usa Apache mod_php ou PHP-FPM.
Localize o arquivo de configuração carregado do ambiente de execução da web .
Configure o PHP da web memory_limitpara pelo menos 512M.
Atualize também o PHP da CLI se occo cron estiver usando um limite inferior.
Para o Docker, configure OWNCLOUD_MEMORY_LIMIT=512Mno ambiente de implantação.
Reinicie ou recrie o serviço que está executando o PHP.
Verifique o valor no ambiente de execução da web, não apenas na linha de comando.
Confirme se o aviso do ownCloud desapareceu.
Monitore a RAM e a memória swap do host antes de aumentar o limite além de 512 MB.
Resumindo
A solução definitiva para o erro “Limite de memória PHP abaixo do valor recomendado” no ownCloud 10 é configurar o ambiente de execução PHP que executa o ownCloud para usar um limite de 512 MB ou superior e, em seguida, verificar o resultado com o mesmo ambiente de execução. O erro mais comum ocorre ao editar o arquivo de configuração /etc/php/.../cli/php.inienquanto o ownCloud está sendo executado por meio do PHP-FPM ou Apache com um arquivo de configuração diferente.
Pare assim que o aviso desaparecer, as operações de rotina estiverem funcionando corretamente e o host tiver memória disponível com folga suficiente. Se o PHP ainda consumir 512 MB durante uma operação específica, mude de "aumentar o limite" para diagnóstico da carga de trabalho: inspecione o comando com falha, os aplicativos, os logs, a concorrência e a RAM física. Um limite maior pode ser apropriado, mas somente quando a carga de trabalho justificar e o servidor puder suportá-lo com segurança.