{"id":15906,"date":"2025-12-08T18:23:46","date_gmt":"2025-12-08T17:23:46","guid":{"rendered":"https:\/\/webhosting.de\/php-opcache-konfiguration-performance-optimierung-cacheboost\/"},"modified":"2025-12-08T18:23:46","modified_gmt":"2025-12-08T17:23:46","slug":"php-opcache-configuracao-otimizacao-de-desempenho-cacheboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/php-opcache-konfiguration-performance-optimierung-cacheboost\/","title":{"rendered":"PHP OPcache explicado em profundidade: como tirar o m\u00e1ximo partido da sua cache"},"content":{"rendered":"<p>O PHP OPcache acelera os meus scripts porque o PHP compila o <strong>bytecode<\/strong> na mem\u00f3ria, poupando assim uma nova an\u00e1lise. Neste guia, mostro como utilizo o OPcache. <strong>configurar<\/strong>, monitorizo e ajusto com precis\u00e3o para que a sua aplica\u00e7\u00e3o responda de forma significativamente mais r\u00e1pida e absorva picos de carga com tranquilidade.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<ul>\n  <li><strong>Cache de bytecode<\/strong> reduz a carga da CPU e a E\/S<\/li>\n  <li><strong>Par\u00e2metros<\/strong> como selecionar especificamente memory_consumption e max_accelerated_files<\/li>\n  <li><strong>Arredores<\/strong> ajustar de forma diferenciada: Dev, Staging, Produ\u00e7\u00e3o<\/li>\n  <li><strong>Monitoriza\u00e7\u00e3o<\/strong> para taxa de acertos, ocupa\u00e7\u00e3o, evictions<\/li>\n  <li><strong>Implanta\u00e7\u00e3o<\/strong> e limpar o cache<\/li>\n<\/ul>\n\n<h2>Como funciona o OPcache: bytecode em vez de recompila\u00e7\u00e3o<\/h2>\n\n<p>Para cada solicita\u00e7\u00e3o, o PHP normalmente l\u00ea os ficheiros, analisa o c\u00f3digo e cria <strong>bytecode<\/strong>, executado pelo Zend Engine. O OPcache atua exatamente aqui e armazena esse bytecode na mem\u00f3ria partilhada, para que as solicita\u00e7\u00f5es subsequentes sejam iniciadas diretamente da mem\u00f3ria. Isso reduz os ciclos da CPU e os acessos aos ficheiros, o que diminui significativamente os tempos de resposta. Em configura\u00e7\u00f5es t\u00edpicas, consigo ganhos entre 30 e 70 por cento, dependendo da base de c\u00f3digo e do perfil de tr\u00e1fego. O importante \u00e9 que o cache permane\u00e7a grande o suficiente e os scripts mais importantes fiquem permanentemente no <strong>Mem\u00f3ria<\/strong> permanecer.<\/p>\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-opcache-workspace-7164.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Verificar e ativar o OPcache no Linux, Windows e alojamento partilhado<\/h2>\n\n<p>Come\u00e7o sempre por consultar o phpinfo() e procurar por \u201eZend\u00bb. <strong>OPcache<\/strong>\u201c e chaves como opcache.enable ou opcache.memory_consumption. No Linux, ativo o m\u00f3dulo atrav\u00e9s do pacote php-opcache e um opcache.ini no diret\u00f3rio conf.d. No Windows, basta inserir zend_extension=opcache no php.ini e reiniciar o servidor web. Na hospedagem partilhada, ativo frequentemente o OPcache atrav\u00e9s de um php.ini personalizado ou atrav\u00e9s do menu do cliente. Em caso de congestionamentos, verifico tamb\u00e9m o <a href=\"https:\/\/webhosting.de\/pt\/php-limite-de-memoria-aumento-evitar-erros-desempenho\/\">Aumentar o limite de mem\u00f3ria PHP<\/a>, para que o OPcache e o PHP-FPM tenham recursos suficientes <strong>Recursos<\/strong> recebido.<\/p>\n\n<h2>Os interruptores mais importantes explicados de forma compreens\u00edvel<\/h2>\n\n<p>Com opcache.enable, ativo a cache para solicita\u00e7\u00f5es da Web, enquanto opcache.enable_cli controla o uso para tarefas CLI, o que \u00e9 \u00fatil para filas de trabalho. O n\u00facleo \u00e9 opcache.memory_consumption, que especifica a mem\u00f3ria partilhada dispon\u00edvel em megabytes; uma estimativa muito baixa leva a evictions e novas <strong>compila\u00e7\u00f5es<\/strong>. opcache.max_accelerated_files define quantos ficheiros podem ser armazenados na cache; este valor deve exceder significativamente o n\u00famero de ficheiros do projeto. Com opcache.validate_timestamps e opcache.revalidate_freq, determino o rigor com que o OPcache verifica as altera\u00e7\u00f5es nos ficheiros, desde muito din\u00e2mico (desenvolvimento) at\u00e9 muito econ\u00f4mico (produ\u00e7\u00e3o com flush manual). Salvo coment\u00e1rios com opcache.save_comments=1, porque muitas ferramentas em <strong>DocBlocks<\/strong> dependem.<\/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_opcache_meeting_7093.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Valores iniciais e perfis em compara\u00e7\u00e3o<\/h2>\n\n<p>Para uma introdu\u00e7\u00e3o tranquila, aposto em perfis claros para desenvolvimento, staging e produ\u00e7\u00e3o. Assim, obtenho ciclos de feedback r\u00e1pidos durante a codifica\u00e7\u00e3o e, por outro lado, um desempenho fi\u00e1vel em opera\u00e7\u00e3o ao vivo. \u00c9 importante que verifique regularmente esses valores iniciais em rela\u00e7\u00e3o a m\u00e9tricas reais e os ajuste. Para instala\u00e7\u00f5es maiores do WordPress, planeio generosamente a mem\u00f3ria e as entradas, porque os plugins e temas ocupam muito espa\u00e7o. <strong>Arquivos<\/strong> gerar. A tabela seguinte resume valores iniciais \u00fateis, que eu ajusto posteriormente com base na taxa de acertos e evictions.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Defini\u00e7\u00e3o<\/th>\n      <th>Desenvolvimento<\/th>\n      <th>Prepara\u00e7\u00e3o\/Teste<\/th>\n      <th>Produ\u00e7\u00e3o<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>opcache.enable<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.enable_cli<\/td>\n      <td>0<\/td>\n      <td>0\u20131<\/td>\n      <td>1 (para tarefas CLI)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.memory_consumption<\/td>\n      <td>128\u2013256 MB<\/td>\n      <td>256\u2013512 MB<\/td>\n      <td>256\u2013512+ MB<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.interned_strings_buffer<\/td>\n      <td>16\u201332 MB<\/td>\n      <td>32\u201364 MB<\/td>\n      <td>16\u201364 MB<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.max_accelerated_files<\/td>\n      <td>8.000\u201310.000<\/td>\n      <td>10.000\u201320.000<\/td>\n      <td>10 000\u201320 000+<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.validate_timestamps<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>0\u20131 (dependendo da implementa\u00e7\u00e3o)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.revalidate_freq<\/td>\n      <td>0\u20132 s<\/td>\n      <td>60\u2013300 s<\/td>\n      <td>300+ s ou 0 (com verifica\u00e7\u00e3o manual)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.save_comments<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.fast_shutdown<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Esta matriz \u00e9 deliberadamente pragm\u00e1tica, porque os projetos reais crescem de formas muito diferentes. Come\u00e7o com estes valores e, em seguida, observo a taxa de acertos, a quota ocupada na mem\u00f3ria partilhada e a ocorr\u00eancia de evictions. Se houver sinais de press\u00e3o, primeiro aumento o opcache.memory_consumption em passos moderados. Em seguida, ajusto o opcache.max_accelerated_files at\u00e9 que o n\u00famero de ficheiros caiba confortavelmente. Assim, o <strong>Cache<\/strong> eficaz e as consultas continuam a fluir uniformemente.<\/p>\n\n<h2>Configura\u00e7\u00f5es por ambiente: desenvolvimento, prepara\u00e7\u00e3o, produ\u00e7\u00e3o<\/h2>\n\n<p>No desenvolvimento, respostas r\u00e1pidas \u00e0s altera\u00e7\u00f5es de c\u00f3digo s\u00e3o importantes, por isso defino validate_timestamps=1 e revalidate_freq muito baixo ou mesmo 0. No staging, verifico a carga realista e defino a mem\u00f3ria generosamente, para que os resultados se aproximem da opera\u00e7\u00e3o ao vivo posterior. Na produ\u00e7\u00e3o, aumento a frequ\u00eancia de verifica\u00e7\u00e3o ou desativo completamente os carimbos de data\/hora, se a minha implementa\u00e7\u00e3o esvaziar o cache de forma seletiva. Para trabalhadores baseados em CLI, ativo enable_cli=1, para que tarefas recorrentes tamb\u00e9m sejam executadas pelo <strong>Cache de bytecode<\/strong> beneficiar. Assim, cada ambiente gera exatamente o comportamento que eu preciso, sem surpresas nos tempos de resposta.<\/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-opcache-visualisierung-cache-9281.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configura\u00e7\u00f5es avan\u00e7adas que muitas vezes fazem a diferen\u00e7a<\/h2>\n\n<p>Al\u00e9m dos par\u00e2metros b\u00e1sicos, existem interruptores com os quais posso aumentar a estabilidade e a seguran\u00e7a e minimizar os efeitos secund\u00e1rios:<\/p>\n\n<ul>\n  <li>opcache.max_wasted_percentage: Define a partir de que n\u00edvel de fragmenta\u00e7\u00e3o o OPcache inicia uma reconstru\u00e7\u00e3o interna da mem\u00f3ria. Em bases de c\u00f3digo muito vari\u00e1veis, reduzo ligeiramente o valor para ter menos mem\u00f3ria \u201edesperdi\u00e7ada\u201c.<\/li>\n  <li>opcache.force_restart_timeout: per\u00edodo em segundos ap\u00f3s o qual o OPcache executa uma reinicializa\u00e7\u00e3o for\u00e7ada quando uma reinicializa\u00e7\u00e3o est\u00e1 pendente, mas os processos ainda est\u00e3o ativos. Isso evita estados de suspens\u00e3o muito longos.<\/li>\n  <li>opcache.file_update_protection: janela de prote\u00e7\u00e3o em segundos, durante a qual os ficheiros rec\u00e9m-alterados n\u00e3o s\u00e3o imediatamente armazenados em cache. Isso ajuda a evitar ficheiros parcialmente gravados durante implementa\u00e7\u00f5es ou em unidades de rede.<\/li>\n  <li>opcache.restrict_api: Restringe quais scripts podem chamar opcache_reset() e fun\u00e7\u00f5es de estado. Em produ\u00e7\u00e3o, defino isso de forma rigorosa, para que apenas pontos finais de administra\u00e7\u00e3o tenham acesso.<\/li>\n  <li>opcache.blacklist_filename: ficheiro no qual mantenho padr\u00f5es que s\u00e3o exclu\u00eddos da cache (por exemplo, geradores altamente din\u00e2micos). Isso economiza espa\u00e7o para scripts mais cr\u00edticos.<\/li>\n  <li>opcache.validate_permission e opcache.validate_root: ativadas quando h\u00e1 v\u00e1rios utilizadores\/chroots em jogo. Assim, o PHP impede que o c\u00f3digo armazenado em cache de um contexto seja utilizado sem autoriza\u00e7\u00e3o noutro.<\/li>\n  <li>opcache.use_cwd e opcache.revalidate_path: controlo de como o OPcache identifica scripts quando os caminhos s\u00e3o integrados atrav\u00e9s de diferentes diret\u00f3rios de trabalho\/links simb\u00f3licos. Em links simb\u00f3licos de lan\u00e7amento, testo estes valores especificamente para evitar caches duplicados.<\/li>\n  <li>opcache.cache_id: Quando v\u00e1rios hosts virtuais partilham o mesmo SHM (raro), eu separo os caches de forma clara atrav\u00e9s de um ID \u00fanico.<\/li>\n  <li>opcache.optimization_level: Normalmente deixo no padr\u00e3o. Apenas em casos extremos de depura\u00e7\u00e3o \u00e9 que reduzo temporariamente as passagens de otimiza\u00e7\u00e3o.<\/li>\n<\/ul>\n\n<h2>Pr\u00e9-carregamento: manter partes do c\u00f3digo permanentemente na mem\u00f3ria<\/h2>\n\n<p>Com o PHP 7.4+, posso carregar e ligar ficheiros centrais do framework ou do projeto ao iniciar o servidor atrav\u00e9s do opcache.preload e do opcache.preload_user. A vantagem: as classes est\u00e3o dispon\u00edveis sem autoload hits e os hot paths est\u00e3o imediatamente dispon\u00edveis. Algumas regras pr\u00e1ticas:<\/p>\n\n<ul>\n  <li>O pr\u00e9-carregamento vale a pena principalmente para bases de c\u00f3digo grandes e est\u00e1veis (por exemplo, Symfony, bibliotecas principais pr\u00f3prias). No WordPress, eu o uso com cautela, porque o n\u00facleo\/plugins s\u00e3o atualizados com mais frequ\u00eancia.<\/li>\n  <li>Um ficheiro de pr\u00e9-carregamento cont\u00e9m chamadas opcache_compile_file() espec\u00edficas ou integra um autoloader que define classes <em>antecipadamente<\/em> carrega.<\/li>\n  <li>Qualquer altera\u00e7\u00e3o no c\u00f3digo de ficheiros relevantes para o pr\u00e9-carregamento requer uma reinicializa\u00e7\u00e3o do PHP-FPM para que o pr\u00e9-carregamento seja reconstru\u00eddo. Eu integro isso nas implementa\u00e7\u00f5es.<\/li>\n  <li>Eu avalio o efeito separadamente: nem todos os c\u00f3digos se beneficiam; o pr\u00e9-carregamento consome mem\u00f3ria partilhada adicional.<\/li>\n<\/ul>\n\n<h2>JIT e OPcache: vantagens, limita\u00e7\u00f5es, requisitos de mem\u00f3ria<\/h2>\n\n<p>Desde o PHP 8, existe o compilador Just-In-Time (JIT), que \u00e9 controlado pelo OPcache (opcache.jit, opcache.jit_buffer_size). Para cargas de trabalho t\u00edpicas da Web com carga de E\/S e banco de dados, o JIT geralmente traz poucos benef\u00edcios. No entanto, ele pode ajudar significativamente em c\u00f3digos com alta carga de CPU (por exemplo, processamento de imagens\/dados). Eu procedo da seguinte forma:<\/p>\n\n<ul>\n  <li>Eu ativo o JIT de forma conservadora e me\u00e7o m\u00e9tricas de utilizadores reais, bem como perfis de CPU. A ativa\u00e7\u00e3o cega aumenta a necessidade de mem\u00f3ria e pode desencadear casos extremos.<\/li>\n  <li>Eu dimensiono o buffer JIT dependendo das rotas com carga elevada da CPU. Buffers muito pequenos n\u00e3o agregam valor, enquanto buffers muito grandes substituem o bytecode.<\/li>\n  <li>Se a taxa de acertos ou a ocupa\u00e7\u00e3o SHM forem afetadas, eu priorizo o OPcache em vez do JIT. O cache de bytecode \u00e9 a alavanca mais importante para a maioria dos sites.<\/li>\n<\/ul>\n\n<h2>Caminhos de ficheiros, links simb\u00f3licos e estrat\u00e9gias de implementa\u00e7\u00e3o seguras<\/h2>\n\n<p>O OPcache \u00e9 baseado em caminho. Por isso, coloco a estrat\u00e9gia de implementa\u00e7\u00e3o em destaque:<\/p>\n\n<ul>\n  <li>Lan\u00e7amentos at\u00f3micos por symlink (por exemplo, \/releases\/123 -&gt; \/current): Limpo, mas aten\u00e7\u00e3o ao opcache.use_cwd e ao comportamento do realpath. Evito caches duplicados fazendo com que todos os trabalhadores vejam consistentemente o mesmo caminho real.<\/li>\n  <li>Com validate_timestamps=0, o cache deve <em>em todo o lado<\/em> Esvaziar: ap\u00f3s a mudan\u00e7a, eu fa\u00e7o o flush do OPcache de forma direcionada em todos os hosts\/pods e reinicio o PHP-FPM de forma controlada.<\/li>\n  <li>Eu coordeno realpath_cache_size e realpath_cache_ttl com OPcache para que as pesquisas de ficheiros permane\u00e7am r\u00e1pidas e est\u00e1veis.<\/li>\n  <li>Em unidades de rede (NFS\/SMB), aumento o file_update_protection e configuro as implementa\u00e7\u00f5es de forma a que os ficheiros sejam substitu\u00eddos atomicamente.<\/li>\n<\/ul>\n\n<p>Para reinicializa\u00e7\u00f5es muito r\u00e1pidas, costumo usar um procedimento em duas etapas: primeiro, aquecimento em segundo plano; depois, recarregamento r\u00e1pido e coordenado de todos os trabalhadores, para que o primeiro tr\u00e1fego ao vivo j\u00e1 encontre o cache aquecido.<\/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-opcache-workspace-5931.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Cache de ficheiros, aquecimento e prepara\u00e7\u00e3o<\/h2>\n\n<p>Al\u00e9m da mem\u00f3ria partilhada, o OPcache pode, opcionalmente, gravar o bytecode no disco (opcache.file_cache). Isso ajuda em cen\u00e1rios espec\u00edficos:<\/p>\n\n<ul>\n  <li>Em ambientes de contentores, um cache de ficheiros pode <em>entre<\/em> Reinicializa\u00e7\u00f5es FPM Reduzir os tempos de recompila\u00e7\u00e3o, desde que o armazenamento seja r\u00e1pido.<\/li>\n  <li>Eu uso o opcache.file_cache com cautela: em sistemas de ficheiros lentos ou distribu\u00eddos, ele traz poucos benef\u00edcios e aumenta a complexidade.<\/li>\n  <li>opcache.file_cache_only \u00e9 um caso especial para ambientes sem SHM \u2013 incomum para configura\u00e7\u00f5es de desempenho.<\/li>\n<\/ul>\n\n<p>Para os aquecimentos, eu crio pequenos \u201eprimers\u201c:<\/p>\n\n<ul>\n  <li>Um script CLI chama opcache_compile_file() para ficheiros quentes, por exemplo, autoloader, classes centrais do framework, grandes auxiliares.<\/li>\n  <li>Um rastreador visita as principais rotas (p\u00e1gina inicial, login, checkout) para que o bytecode e os caches a jusante estejam aquecidos a tempo.<\/li>\n  <li>Eu programo os aquecimentos para que terminem pouco antes da mudan\u00e7a de vers\u00e3o.<\/li>\n<\/ul>\n\n<h2>OPcache na pilha: PHP-FPM, cache de objetos e cache de p\u00e1ginas<\/h2>\n\n<p>O OPcache mostra a sua for\u00e7a principalmente em combina\u00e7\u00e3o com o PHP-FPM, uma configura\u00e7\u00e3o de processo limpa e camadas de cache adicionais. No WordPress, eu o combino com um cache de objetos (como o Redis) e um cache de p\u00e1ginas, para aliviar a carga do banco de dados e da renderiza\u00e7\u00e3o. Para isso, presto aten\u00e7\u00e3o ao <a href=\"https:\/\/webhosting.de\/pt\/php-single-thread-performance-wordpress-hosting-velocity\/\">Desempenho de thread \u00fanico<\/a>, porque as solicita\u00e7\u00f5es PHP dependem muito dos n\u00facleos individuais da CPU. Se, mesmo assim, houver press\u00e3o, distribuo a carga pelos PHP-FPM-Worker, sem selecionar uma mem\u00f3ria partilhada do OPcache muito pequena. Assim, utilizo o <strong>Pilha<\/strong> completo, em vez de apenas ajustar um parafuso.<\/p>\n\n<h2>Erros frequentes e controlos r\u00e1pidos<\/h2>\n\n<p>Um cache muito pequeno leva a evictions, que eu reconhe\u00e7o no status do OPcache ou phpinfo(). Se isso acontecer, eu aumento gradualmente o opcache.memory_consumption e controlo o efeito atrav\u00e9s da taxa de acertos. Se os ficheiros continuarem sem acelera\u00e7\u00e3o, eu defino o opcache.max_accelerated_files para um valor superior \u00e0 quantidade real de ficheiros no projeto. Em caso de problemas de implementa\u00e7\u00e3o, verifico validate_timestamps: com 0, o bytecode antigo permanece ativo at\u00e9 eu esvaziar explicitamente a cache. Ferramentas como Doctrine exigem DocBlocks, por isso deixo save_comments=1 para <strong>Erro<\/strong> evitar a falta de anota\u00e7\u00f5es.<\/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_opcache_nachtarbeit_4382.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorizar e interpretar o OPcache<\/h2>\n\n<p>Eu me\u00e7o a taxa de acertos e busco valores pr\u00f3ximos a 100% de forma cont\u00ednua, para que as consultas quase sempre sejam iniciadas a partir do cache. Al\u00e9m disso, observo a utiliza\u00e7\u00e3o da mem\u00f3ria e o n\u00famero de evictions para detetar atempadamente eventuais estrangulamentos. Com opcache_get_status(), crio pequenos pain\u00e9is de controlo ou alimento solu\u00e7\u00f5es de monitoriza\u00e7\u00e3o existentes. Assim, vejo imediatamente as altera\u00e7\u00f5es ap\u00f3s lan\u00e7amentos ou atualiza\u00e7\u00f5es de plugins. Com estas m\u00e9tricas, tomo decis\u00f5es fundamentadas. <strong>Decis\u00f5es<\/strong> e adapte apenas o que for realmente necess\u00e1rio.<\/p>\n\n<p>Diretrizes concretas que se mostraram eficazes:<\/p>\n\n<ul>\n  <li>Taxa de acertos &gt; 99 % sob carga normal e pico; abaixo disso, verifico a distribui\u00e7\u00e3o de ficheiros e o aquecimento.<\/li>\n  <li>Propor\u00e7\u00e3o livre de SHM constante &gt; 5\u201310 %; caso contr\u00e1rio, eu escalo a mem\u00f3ria.<\/li>\n  <li>Evictions ao longo do tempo: picos pontuais ap\u00f3s a implementa\u00e7\u00e3o s\u00e3o aceit\u00e1veis; evictions cont\u00ednuas indicam subdimensionamento ou forte fragmenta\u00e7\u00e3o.<\/li>\n  <li>Ficar atento \u00e0 mem\u00f3ria desperdi\u00e7ada: se ela atingir o limite, planeio uma recria\u00e7\u00e3o controlada do OPcache (por exemplo, em janelas de manuten\u00e7\u00e3o).<\/li>\n<\/ul>\n\n<h2>Exemplo: configura\u00e7\u00e3o do WordPress com tr\u00e1fego elevado<\/h2>\n\n<p>Para grandes sites WordPress, eu seleciono opcache.enable=1 e opcache.enable_cli=1, para que os CLI-Workers tamb\u00e9m se beneficiem. Eu gosto de definir a mem\u00f3ria partilhada para 384 MB ou mais, quando h\u00e1 muitos plugins e um tema rico em funcionalidades envolvidos. Aumento o opcache.interned_strings_buffer para 64 MB, porque muitos nomes de classes e fun\u00e7\u00f5es se repetem em todas as solicita\u00e7\u00f5es. Para ambientes de desempenho extremo, defino validate_timestamps=0 e revalidate_freq=0, mas limpo o cache imediatamente ap\u00f3s cada lan\u00e7amento. \u00c9 importante projetar as implementa\u00e7\u00f5es de forma que nenhum antigo <strong>bytecode<\/strong> continua em circula\u00e7\u00e3o.<\/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_opcache_schreibtisch_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Fluxo de trabalho pr\u00e1tico para ajustes e implementa\u00e7\u00f5es<\/h2>\n\n<p>Eu trabalho em ciclos fixos: medir, alterar, controlar. Primeiro, eu salvo valores de status como taxa de acertos, ocupa\u00e7\u00e3o e evictions, depois ajusto um par\u00e2metro e medo novamente. Antes de um lan\u00e7amento, apago o OPcache de forma seletiva com os carimbos de data\/hora desativados, seja atrav\u00e9s do rein\u00edcio do PHP-FPM ou de um pequeno script. Em seguida, controlo os picos de carga com tr\u00e1fego real ou benchmarks representativos. Se ocorrer algum comportamento anormal, tamb\u00e9m 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 eles utilizam o <strong>Partilhado<\/strong> A mem\u00f3ria diminui.<\/p>\n\n<p>Algumas rotinas adicionais que se mostraram eficazes em equipas:<\/p>\n\n<ul>\n  <li>Vers\u00f5es das altera\u00e7\u00f5es de par\u00e2metros: opcache.ini no reposit\u00f3rio, altera\u00e7\u00f5es por pull request e changelog.<\/li>\n  <li>Canary-Deploys: primeiro, apenas uma parte dos trabalhadores\/pods carrega novas vers\u00f5es e cria cache, depois \u00e9 feita a implementa\u00e7\u00e3o em todas as inst\u00e2ncias.<\/li>\n  <li>Bot\u00e3o de emerg\u00eancia: um ponto final administrativo interno com acesso seguro que permite opcache_reset() e chamadas opcache_invalidate() espec\u00edficas \u2013 combinado com opcache.restrict_api.<\/li>\n  <li>Estimar a ordem de grandeza: como regra geral, calculo inicialmente 1\u20132 MB de OPcache por 100\u2013200 ficheiros PHP e, em seguida, ajusto com base nas m\u00e9tricas reais. Para o WordPress com muitos plugins, adiciono buffer.<\/li>\n<\/ul>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>O OPcache torna as aplica\u00e7\u00f5es PHP mais r\u00e1pidas, compilando o <strong>bytecode<\/strong> na RAM. Com as configura\u00e7\u00f5es adequadas para mem\u00f3ria, n\u00famero de ficheiros e estrat\u00e9gia de carimbo de data\/hora, voc\u00ea alcan\u00e7ar\u00e1 tempos de resposta consistentemente curtos. Certifique-se de que tudo esteja sincronizado com o PHP-FPM e outras camadas de cache, para que toda a pilha funcione perfeitamente em conjunto. Monitore a taxa de acertos, ocupa\u00e7\u00e3o e evictions para fazer ajustes espec\u00edficos. Assim, voc\u00ea garante um desempenho confi\u00e1vel e de alto n\u00edvel. <strong>Plataforma<\/strong> para cargas elevadas e crescimento.<\/p>","protected":false},"excerpt":{"rendered":"<p>Aprenda a configurar corretamente o PHP OPcache e a aumentar significativamente o desempenho das suas aplica\u00e7\u00f5es com um ajuste espec\u00edfico do php opcache.<\/p>","protected":false},"author":1,"featured_media":15899,"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-15906","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":"2537","_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 OPcache","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":"15899","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/15906","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=15906"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/15906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/15899"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=15906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=15906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=15906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}