{"id":16373,"date":"2025-12-30T11:50:36","date_gmt":"2025-12-30T10:50:36","guid":{"rendered":"https:\/\/webhosting.de\/php-garbage-collection-performance-hosting-optimierung-ramfix\/"},"modified":"2025-12-30T11:50:36","modified_gmt":"2025-12-30T10:50:36","slug":"php-recolha-de-lixo-desempenho-otimizacao-de-alojamento-ramfix","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/php-garbage-collection-performance-hosting-optimierung-ramfix\/","title":{"rendered":"Recolha de lixo PHP: fator subestimado para o desempenho do alojamento web"},"content":{"rendered":"<p><strong>Recolha de lixo PHP<\/strong> muitas vezes determina se uma pilha de hospedagem funciona de forma fluida sob carga ou se entra em picos de lat\u00eancia. Mostro como o coletor consome tempo de execu\u00e7\u00e3o, onde ele economiza mem\u00f3ria e como consigo respostas visivelmente mais r\u00e1pidas atrav\u00e9s de um ajuste direcionado.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<p><strong>Esta vis\u00e3o geral<\/strong> Resumo em algumas afirma\u00e7\u00f5es essenciais para que possa ajustar imediatamente os par\u00e2metros que realmente importam. Priorizo a mensurabilidade, porque assim valido as decis\u00f5es de forma clara e n\u00e3o fico \u00e0s cegas. Levo em considera\u00e7\u00e3o os par\u00e2metros de alojamento, pois eles influenciam fortemente o efeito das configura\u00e7\u00f5es de GC. Avalio riscos como fugas e bloqueios, pois eles determinam a estabilidade e a velocidade. Utilizo vers\u00f5es atuais do PHP, porque as melhorias a partir do PHP 8+ reduzem significativamente a carga do GC.<\/p>\n<ul>\n  <li><strong>compromisso<\/strong>: Menos execu\u00e7\u00f5es do GC poupam tempo, mais RAM armazena objetos.<\/li>\n  <li><strong>Ajuste FPM<\/strong>: pm.max_children e pm.max_requests controlam a longevidade e as fugas.<\/li>\n  <li><strong>OpCache<\/strong>: Menos compila\u00e7\u00f5es reduzem a press\u00e3o sobre o alocador e o GC.<\/li>\n  <li><strong>Sess\u00f5es<\/strong>: O SGC alivia significativamente as solicita\u00e7\u00f5es por meio do Cron.<\/li>\n  <li><strong>Defini\u00e7\u00e3o de perfis<\/strong>: Blackfire, Tideways e Xdebug mostram pontos cr\u00edticos reais.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-gc-serverraum-2384.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Como funciona o Garbage Collector em PHP<\/h2>\n\n<p><strong>PHP<\/strong> usa contagem de refer\u00eancia para a maioria das vari\u00e1veis e passa ciclos para o Garbage Collector. Observo como o coletor marca estruturas c\u00edclicas, verifica ra\u00edzes e libera mem\u00f3ria. Ele n\u00e3o \u00e9 executado em cada solicita\u00e7\u00e3o, mas com base em gatilhos e heur\u00edstica interna. No PHP 8.5, as otimiza\u00e7\u00f5es reduzem a quantidade de objetos potencialmente colet\u00e1veis, o que significa varreduras menos frequentes. Eu defino <strong>gc_status()<\/strong> para controlar execu\u00e7\u00f5es, bytes recolhidos e buffer raiz.<\/p>\n\n<h3>Compreender os gatilhos e as heur\u00edsticas<\/h3>\n<p>Na pr\u00e1tica, a recolha come\u00e7a quando o buffer raiz interno ultrapassa um limite, no encerramento da solicita\u00e7\u00e3o ou quando eu explicitamente <strong>gc_collect_cycles()<\/strong> chamadas. Longas cadeias de objetos com refer\u00eancias c\u00edclicas preenchem o buffer raiz mais rapidamente. Isso explica por que determinadas cargas de trabalho (ORM pesado, despachante de eventos, closures com <em>$this<\/em>-Captures) apresentam uma atividade GC significativamente maior do que scripts simples. As vers\u00f5es mais recentes do PHP reduzem o n\u00famero de candidatos inclu\u00eddos no buffer raiz, o que diminui consideravelmente a frequ\u00eancia.<\/p>\n\n<h3>Controlar de forma direcionada em vez de desativar cegamente<\/h3>\n<p>N\u00e3o desativo a recolha de forma generalizada. No entanto, em tarefas em lote ou em trabalhadores CLI, vale a pena desativar temporariamente o GC (<strong>gc_disable()<\/strong>), calcular o trabalho e, no final, <strong>gc_enable()<\/strong> mais <strong>gc_collect_cycles()<\/strong> executar. Para pedidos FPM Web, permanece <strong>zend.enable_gc=1<\/strong> A minha configura\u00e7\u00e3o padr\u00e3o \u2013 caso contr\u00e1rio, corro o risco de ter fugas ocultas com o RSS crescente.<\/p>\n\n<h2>Influ\u00eancia no desempenho sob carga<\/h2>\n\n<p><strong>Defini\u00e7\u00e3o de perfis<\/strong> Mostra regularmente em projetos 10\u201321% de tempo de execu\u00e7\u00e3o para a recolha, dependendo dos gr\u00e1ficos de objetos e da carga de trabalho. Em fluxos de trabalho individuais, a economia com a desativa\u00e7\u00e3o tempor\u00e1ria foi de dezenas de segundos, enquanto o consumo de RAM aumentou moderadamente. Por isso, avalio sempre a troca: tempo contra mem\u00f3ria. Gatilhos GC frequentes geram travamentos, que se acumulam quando o tr\u00e1fego \u00e9 intenso. Processos bem dimensionados reduzem esses picos e mant\u00eam as lat\u00eancias est\u00e1veis.<\/p>\n\n<h3>Suavizar as lat\u00eancias de cauda<\/h3>\n<p>N\u00e3o me\u00e7o apenas a m\u00e9dia, mas tamb\u00e9m p95\u2013p99. \u00c9 exatamente a\u00ed que os GC-Stalls atacam, porque coincidem com picos no gr\u00e1fico de objetos (por exemplo, ap\u00f3s falhas de cache ou arranques a frio). Medidas como maiores <strong>opcache.interned_strings_buffer<\/strong>, menos duplica\u00e7\u00e3o de strings e lotes menores reduzem o n\u00famero de objetos por solicita\u00e7\u00e3o \u2013 e, consequentemente, a varia\u00e7\u00e3o.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/phpmeeting_gcperf_3729.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Gest\u00e3o de mem\u00f3ria PHP em detalhe<\/h2>\n\n<p><strong>Refer\u00eancias<\/strong> e ciclos determinam como a mem\u00f3ria flui e quando o coletor interv\u00e9m. Evito vari\u00e1veis globais porque elas prolongam o tempo de vida e aumentam o gr\u00e1fico. Geradores em vez de grandes matrizes reduzem os picos de carga e mant\u00eam as cole\u00e7\u00f5es menores. Al\u00e9m disso, verifico <a href=\"https:\/\/webhosting.de\/pt\/fragmentacao-de-memoria-alojamento-web-php-mysql-otimizacao-fluxo-de-bytes\/\">Fragmenta\u00e7\u00e3o da mem\u00f3ria<\/a>, porque a pilha fragmentada enfraquece a utiliza\u00e7\u00e3o eficaz da RAM. Bons escopos e a libera\u00e7\u00e3o de grandes estruturas ap\u00f3s a utiliza\u00e7\u00e3o mant\u00eam a coleta eficiente.<\/p>\n\n<h3>Fontes t\u00edpicas de ciclos<\/h3>\n<ul>\n  <li><strong>Fechos<\/strong>quem <em>$this<\/em> capturar, enquanto o objeto, por sua vez, mant\u00e9m ouvintes.<\/li>\n  <li><strong>Despachante de eventos<\/strong> com listas de ouvintes duradouras.<\/li>\n  <li><strong>ORMs<\/strong> com rela\u00e7\u00f5es bidirecionais e caches de unidade de trabalho.<\/li>\n  <li><strong>Caches globais<\/strong> em PHP (singletons), que mant\u00eam refer\u00eancias e aumentam os escopos.<\/li>\n<\/ul>\n<p>Eu quebro esses ciclos de forma direcionada: acoplamento mais fraco, reinicializa\u00e7\u00e3o do ciclo de vida ap\u00f3s lotes, consciente <strong>unset()<\/strong> em grandes estruturas. Quando apropriado, utilizo <strong>WeakMap<\/strong> ou <strong>Refer\u00eancia fraca<\/strong>, para que os caches tempor\u00e1rios de objetos n\u00e3o se tornem uma carga permanente.<\/p>\n\n<h3>Trabalhador CLI e corredor de longa dist\u00e2ncia<\/h3>\n<p>No caso de filas ou daemons, a import\u00e2ncia da limpeza c\u00edclica aumenta. Eu recolho ap\u00f3s N tarefas (<em>N<\/em> dependendo da carga \u00fatil 50\u2013500) via <strong>gc_collect_cycles()<\/strong> e observo o hist\u00f3rico RSS. Se ele aumentar apesar da recolha, planeio uma reinicializa\u00e7\u00e3o independente do trabalhador a partir de um valor limite. Isso reflete a l\u00f3gica FPM de <strong>pm.max_requests<\/strong> no mundo CLI.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-garbage-collection-server-9083.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ajuste do FPM e do OpCache, que alivia a carga do GC<\/h2>\n\n<p><strong>PHP-FPM<\/strong> determina quantos processos existem em paralelo e por quanto tempo eles permanecem ativos. Eu calculo o pm.max_children aproximadamente como (RAM total \u2212 2 GB) \/ 50 MB por processo e ajusto com valores reais medidos. Atrav\u00e9s do pm.max_requests, reciclo processos regularmente, para que n\u00e3o haja possibilidade de fugas. O OpCache reduz a sobrecarga de compila\u00e7\u00e3o e diminui a duplica\u00e7\u00e3o de strings, o que reduz o volume de aloca\u00e7\u00f5es e, consequentemente, a press\u00e3o sobre a recolha. Estou a aperfei\u00e7oar os detalhes na <a href=\"https:\/\/webhosting.de\/pt\/php-opcache-configuracao-otimizacao-de-desempenho-cacheboost\/\">Configura\u00e7\u00e3o do OpCache<\/a> e observe as taxas de acerto, reinicializa\u00e7\u00f5es e strings internadas.<\/p>\n\n<h3>Gestor de processos: din\u00e2mico vs. sob demanda<\/h3>\n<p><strong>pm.dynamic<\/strong> mant\u00e9m os trabalhadores aquecidos e amortece picos de carga com pouco tempo de espera. <strong>pm.ondemand<\/strong> economiza RAM em fases de baixa carga, mas inicia processos quando necess\u00e1rio \u2013 o tempo de inicializa\u00e7\u00e3o pode ser percept\u00edvel no p95. Eu seleciono o modelo adequado \u00e0 curva de carga e testo como a mudan\u00e7a afeta as lat\u00eancias de cauda.<\/p>\n\n<h3>Exemplo de c\u00e1lculo e limites<\/h3>\n<p>Como ponto de partida, (RAM \u2212 2 GB) \/ 50 MB resulta rapidamente em valores elevados. Num host de 16 GB, isso seria cerca de 280 trabalhadores. Os n\u00facleos da CPU, as depend\u00eancias externas e a pegada real do processo limitam a realidade. Eu calibro com dados de medi\u00e7\u00e3o (RSS por trabalhador sob carga \u00fatil de pico, lat\u00eancias p95) e muitas vezes chego a valores significativamente mais baixos para n\u00e3o sobrecarregar a CPU e a E\/S.<\/p>\n\n<h3>Detalhes do OpCache com efeito GC<\/h3>\n<ul>\n  <li><strong>buffer_de_strings_internas<\/strong>: Definir um valor mais alto reduz a duplica\u00e7\u00e3o de strings no espa\u00e7o do utilizador e, consequentemente, a press\u00e3o de aloca\u00e7\u00e3o.<\/li>\n  <li><strong>consumo de mem\u00f3ria<\/strong>: Espa\u00e7o suficiente evita a evic\u00e7\u00e3o de c\u00f3digo, reduz as recompila\u00e7\u00f5es e acelera as inicializa\u00e7\u00f5es a quente.<\/li>\n  <li><strong>Pr\u00e9-carregamento<\/strong>: As classes pr\u00e9-carregadas reduzem a sobrecarga do autoload e as estruturas tempor\u00e1rias \u2013 dimensione com cuidado.<\/li>\n<\/ul>\n\n<h3>Recomenda\u00e7\u00f5es em resumo<\/h3>\n\n<p><strong>Esta tabela<\/strong> agrupa valores iniciais, que eu depois ajusto com benchmarks e dados de perfil. Eu adapto os n\u00fameros a projetos concretos, pois as cargas \u00fateis variam muito. Os valores proporcionam uma introdu\u00e7\u00e3o segura, sem valores at\u00edpicos. Ap\u00f3s a implementa\u00e7\u00e3o, mantenho uma janela de teste de carga aberta e reajo \u00e0s m\u00e9tricas. Assim, a carga GC permanece sob controlo e o tempo de resposta \u00e9 curto.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Contexto<\/th>\n      <th>chave<\/th>\n      <th>valor inicial<\/th>\n      <th>Nota<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Gestor de processos<\/td>\n      <td>pm.max_children<\/td>\n      <td>(RAM \u2212 2 GB) \/ 50 MB<\/td>\n      <td><strong>RAM<\/strong> Ponderar contra a concorr\u00eancia<\/td>\n    <\/tr>\n    <tr>\n      <td>Gestor de processos<\/td>\n      <td>pm.iniciar_servidores<\/td>\n      <td>\u2248 25% de max_children<\/td>\n      <td>Arranque a quente para fases de pico<\/td>\n    <\/tr>\n    <tr>\n      <td>Ciclo de vida do processo<\/td>\n      <td>pm.max_requests<\/td>\n      <td>500\u20135.000<\/td>\n      <td>A reciclagem reduz as fugas<\/td>\n    <\/tr>\n    <tr>\n      <td>Mem\u00f3ria<\/td>\n      <td>memory_limit<\/td>\n      <td>256\u2013512 MB<\/td>\n      <td>Demasiado pequeno promove <strong>Celeiros<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>OpCache<\/td>\n      <td>opcache.memory_consumption<\/td>\n      <td>128\u2013256 MB<\/td>\n      <td>Alta taxa de acertos poupa CPU<\/td>\n    <\/tr>\n    <tr>\n      <td>OpCache<\/td>\n      <td>opcache.interned_strings_buffer<\/td>\n      <td>16\u201364<\/td>\n      <td>Partilhar strings reduz a RAM<\/td>\n    <\/tr>\n    <tr>\n      <td>GC<\/td>\n      <td>zend.enable_gc<\/td>\n      <td>1<\/td>\n      <td>Deixar mensur\u00e1vel, n\u00e3o desativar cegamente<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-garbage-collection-office9381.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Controlar de forma direcionada a recolha de lixo da sess\u00e3o<\/h2>\n\n<p><strong>Sess\u00f5es<\/strong> possuem um pr\u00f3prio sistema de elimina\u00e7\u00e3o, que utiliza o acaso em configura\u00e7\u00f5es padr\u00e3o. Desativo a probabilidade atrav\u00e9s de session.gc_probability=0 e chamo o limpador atrav\u00e9s do Cron. Assim, nenhuma solicita\u00e7\u00e3o do utilizador bloqueia a elimina\u00e7\u00e3o de milhares de ficheiros. Planeio a execu\u00e7\u00e3o a cada 15-30 minutos, dependendo de session.gc_maxlifetime. Vantagem decisiva: o tempo de resposta da web permanece est\u00e1vel, enquanto a limpeza ocorre de forma desacoplada no tempo.<\/p>\n\n<h3>Design da sess\u00e3o e impress\u00e3o GC<\/h3>\n<p>Eu mantenho as sess\u00f5es pequenas e n\u00e3o serializo grandes \u00e1rvores de objetos nelas. Sess\u00f5es armazenadas externamente com baixa lat\u00eancia suavizam o caminho da solicita\u00e7\u00e3o, porque o acesso a arquivos e as execu\u00e7\u00f5es de limpeza n\u00e3o geram backlog no Webtier. \u00c9 importante a vida \u00fatil (<strong>session.gc_maxlifetime<\/strong>) ao comportamento de utiliza\u00e7\u00e3o e sincronizar os ciclos de limpeza com janelas fora do pico.<\/p>\n\n<h2>Perfilagem e monitoriza\u00e7\u00e3o: n\u00fameros em vez de intui\u00e7\u00e3o<\/h2>\n\n<p><strong>Perfilador<\/strong> como Blackfire ou Tideways mostram se a recolha realmente causa lentid\u00e3o. Eu comparo execu\u00e7\u00f5es com GC ativo e com desativa\u00e7\u00e3o tempor\u00e1ria em um trabalho isolado. O Xdebug fornece estat\u00edsticas de GC, que eu uso para an\u00e1lises mais aprofundadas. Os indicadores importantes s\u00e3o o n\u00famero de execu\u00e7\u00f5es, ciclos coletados e tempo por ciclo. Com benchmarks repetidos, eu me protejo contra valores at\u00edpicos e tomo decis\u00f5es confi\u00e1veis.<\/p>\n\n<h3>Manual de medi\u00e7\u00e3o<\/h3>\n<ol>\n  <li>Registar linha de base sem altera\u00e7\u00f5es: p50\/p95, RSS por trabalhador, <strong>gc_status()<\/strong>Valores.<\/li>\n  <li>Alterar uma vari\u00e1vel (por exemplo,. <em>pm.max_requests<\/em> ou <em>buffer_de_strings_internas<\/em>), medir novamente.<\/li>\n  <li>Compara\u00e7\u00e3o com quantidade id\u00eantica de dados e aquecimento, pelo menos 3 repeti\u00e7\u00f5es.<\/li>\n  <li>Implementa\u00e7\u00e3o em etapas, monitoriza\u00e7\u00e3o rigorosa, garantia de reversibilidade r\u00e1pida.<\/li>\n<\/ol>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php_gc_performance_4182.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Limites, memory_limit e c\u00e1lculo de RAM<\/h2>\n\n<p><strong>memory_limit<\/strong> define o limite por processo e influencia indiretamente a frequ\u00eancia das recolhas. Primeiro, planeio a pegada real: linha de base, picos, mais OpCache e extens\u00f5es C. Em seguida, seleciono um limite com margem para picos de carga de curta dura\u00e7\u00e3o, normalmente 256\u2013512 MB. Para obter detalhes sobre a intera\u00e7\u00e3o, consulte a publica\u00e7\u00e3o sobre <a href=\"https:\/\/webhosting.de\/pt\/limite-de-memoria-php-efeitos-de-desempenho-otimizacao-de-alojamento-consumo-de-ram\/\">PHP memory_limit<\/a>, que torna os efeitos secund\u00e1rios transparentes. Um limite razo\u00e1vel evita erros de mem\u00f3ria insuficiente, sem aumentar desnecessariamente a carga do GC.<\/p>\n\n<h3>Influ\u00eancias do contentor e NUMA<\/h3>\n<p>Em contentores, o limite cgroup \u00e9 que conta, n\u00e3o apenas a RAM do host. Eu defino <strong>memory_limit<\/strong> e <strong>pm.max_children<\/strong> ao limite do contentor e mantenho dist\u00e2ncias de seguran\u00e7a para que o OOM-Killer n\u00e3o entre em a\u00e7\u00e3o. Em hosts grandes com NUMA, tenho o cuidado de n\u00e3o aglomerar processos para manter o acesso \u00e0 mem\u00f3ria consistentemente r\u00e1pido.<\/p>\n\n<h2>Dicas de arquitetura para tr\u00e1fego intenso<\/h2>\n\n<p><strong>Escalonamento<\/strong> Eu resolvo isso em etapas: primeiro os par\u00e2metros do processo, depois a distribui\u00e7\u00e3o horizontal. As cargas de trabalho com muitas leituras beneficiam-se muito do OpCache e do tempo de inicializa\u00e7\u00e3o curto. Para caminhos de grava\u00e7\u00e3o, eu encapsulo opera\u00e7\u00f5es caras de forma ass\u00edncrona, para que a solicita\u00e7\u00e3o permane\u00e7a leve. O cache pr\u00f3ximo ao PHP reduz a quantidade de objetos e, com isso, o esfor\u00e7o de verifica\u00e7\u00e3o da cole\u00e7\u00e3o. Bons hosts com RAM potente e configura\u00e7\u00e3o FPM limpa, como webhoster.de, facilitam bastante essa abordagem.<\/p>\n\n<h3>Aspectos de c\u00f3digo e compila\u00e7\u00e3o com impacto no GC<\/h3>\n<ul>\n  <li><strong>Otimizar o autoloader do Composer<\/strong>: Menos acessos a ficheiros, matrizes tempor\u00e1rias menores, p95 mais est\u00e1vel.<\/li>\n  <li><strong>Mantenha a carga \u00fatil pequena<\/strong>: DTOs em vez de matrizes enormes, streaming em vez de bulk.<\/li>\n  <li><strong>\u00c2mbitos restritos<\/strong>: Escopo de fun\u00e7\u00e3o em vez de escopo de ficheiro, liberar vari\u00e1veis ap\u00f3s o uso.<\/li>\n<\/ul>\n<p>Essas aparentes pequenas coisas reduzem as aloca\u00e7\u00f5es e os tamanhos dos ciclos, o que afeta diretamente o trabalho do coletor.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-serverraum-8642.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Erros comuns e anti-padr\u00f5es<\/h2>\n\n<p><strong>Sintomas<\/strong> Reconhe\u00e7o isso pelas lat\u00eancias em ziguezague, picos intermitentes da CPU e valores RSS crescentes por trabalhador FPM. As causas mais frequentes s\u00e3o grandes matrizes como recipientes coletores, caches globais em PHP e falta de reinicializa\u00e7\u00e3o de processos. A limpeza de sess\u00f5es no caminho da solicita\u00e7\u00e3o tamb\u00e9m causa respostas lentas. Eu lido com isso usando geradores, lotes menores e ciclos de vida claros. Al\u00e9m disso, verifico se servi\u00e7os externos acionam repeti\u00e7\u00f5es que geram fluxos ocultos de objetos.<\/p>\n\n<h3>Lista de verifica\u00e7\u00e3o pr\u00e1tica<\/h3>\n<ul>\n  <li><strong>gc_status()<\/strong> Registar regularmente: execu\u00e7\u00f5es, tempo por execu\u00e7\u00e3o, utiliza\u00e7\u00e3o do buffer raiz.<\/li>\n  <li><strong>pm.max_requests<\/strong> escolha de forma a que o RSS permane\u00e7a est\u00e1vel.<\/li>\n  <li><strong>buffer_de_strings_internas<\/strong> suficientemente alto para evitar duplicados.<\/li>\n  <li><strong>tamanhos de lote<\/strong> Corte de forma a n\u00e3o criar pontas muito acentuadas.<\/li>\n  <li><strong>Sess\u00f5es<\/strong> Limpar separadamente, n\u00e3o na solicita\u00e7\u00e3o.<\/li>\n<\/ul>\n\n<h2>Classificar resultados: o que realmente importa<\/h2>\n\n<p><strong>Em resumo<\/strong> A recolha de lixo do PHP proporciona uma estabilidade not\u00e1vel quando a controlo conscientemente em vez de a combater. Combino uma frequ\u00eancia de recolha mais baixa com RAM suficiente e utilizo a reciclagem FPM para que as fugas desapare\u00e7am. O OpCache e os conjuntos de dados mais pequenos reduzem a press\u00e3o sobre a pilha e ajudam a evitar bloqueios. Deixo as sess\u00f5es serem limpas pelo Cron para que os pedidos possam respirar livremente. Com m\u00e9tricas e perfis, garanto o efeito e mantenho os tempos de resposta baixos de forma fi\u00e1vel.<\/p>","protected":false},"excerpt":{"rendered":"<p>A recolha de lixo PHP \u00e9 a chave para um melhor desempenho de alojamento web. Otimize a gest\u00e3o de mem\u00f3ria para obter a m\u00e1xima velocidade.<\/p>","protected":false},"author":1,"featured_media":16366,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-16373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"1594","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":null,"_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"PHP Garbage Collection","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"16366","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/16373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=16373"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/16373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/16366"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=16373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=16373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=16373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}