de Informação (Unipar) ➔ Especialista em desenvolvimento web e mobile (Alfa Umuarama) ➔ Desenvolvedor há mais de 10 anos ➔ Engenheiro de Software no PagSeguro International (antigo BoaCompra) ➔ Apaixonado por futebol 🌴👍🌍 e esporte eletrônico (CS2) 🔫 @renandelmonico @renandelmonico /renandelmonico /renandelmonico /renandelmonico [email protected]
“código morto” ➔ Não são somente configurações, também é possível fazer scripts para gerenciar o cache pois o opcache possui algumas funções que podem ser usadas ◆ https://php.net/manual/en/ref.opcache.php
a obtenção dos opcodes seja mais rápida para execução na Zend VM, o JIT faz com que os códigos sejam executados sem VM 🥰 ➔ Zend VM foi escrita em C e funciona como uma camada entre o opcode e a interpretação do opcode pela CPU, o JIT gera um código compilado em tempo de execução para que o PHP “pule” a Zend VM ➔ Implementação usa a lib DynASM (Dynamic Assembler) ◆ O JIT compiler transforma os opcodes em código de máquina específico da arquitetura da CPU usando o DynASM
OPcache. ➔ Valor usado será o primeiro número maior ou igual ao conjunto de números primos [223, 463, 983, 1.979, 3.907, 7.963, 16.229, 32.531, 65.407, 130.987, 262.237, 524.521, 1.048.793] ➔ Valor mínimo é 200 e o máximo é 1.000.000 ➔ Controla quantos scripts PHP podem ser armazenados no OPcache ➔ Um valor maior permite mais scripts, melhorando desempenho, porém consome mais memória opcache.max_accelerated_files=10000
alocar os scripts em memória ➔ Valor mínimo é 8. Caso seja usado um valor menor, será automaticamente alterado para 8. ➔ Mais memória pode aumentar o desempenho, porém aumenta o uso de recursos. opcache.memory_consumption=128
operações intensivas em CPU ➔ É necessário definir a quantidade de memória reservada para o JIT pois, por padrão, ele vem desabilitado ➔ Para aplicações pequenas podemos usar 64MB ou 128MB e para aplicações maiores 256MB, porém cada caso deve ser tratado individualmente ➔ Podemos usar uma aplicação de monitoramento para chegar a um valor ideal, como por exemplo o opcache-gui
é a única configuração que você irá alterar ➔ Cada posição desse número tem um significado ◆ É confuso? É. Mas é o que tem pra hoje ◆ De acordo com a lista da RFC, esse é o significado de cada número… ◆ A ordem das tabelas é da direita para esquerda
1 Compile function on first execution 2 Profile functions on first request and compile the hottest functions afterwards 3 Profile on the fly and compile hot functions 4 Currently unused 5 Use tracing JIT. Profile on the fly and compile traces for hot code segments
1255 ➔ A opção opcache.jit é opcional, se não informada será considerado o valor padrão ➔ E qual o valor padrão? ◆ opcache.jit=tracing ➔ Ué, mas não era aqueles numerozinhos que eu não entendi nada? ◆ Depois de aprovada a RFC, chegaram na conclusão que as opções não eram user-friendly, então refizeram tudo adicionaram dois alias que são “traduzidos” para os numerozinho. • opcache.jit=tracing • opcache.jit=function ➔ A diferença entre os dois é que function o JIT irá tentar otimizar somente o código dentro de um escopo de uma única função, enquanto o tracing faz o trace (ah, vá!) toda a pilha para identificar e otimizar o código. ➔ É recomendado o uso do trace, pois quase sempre apresentará resultados melhores
(praticamente todo dia) ◆ Era normal chegar em 40 instâncias ◆ Em alguns casos foram necessárias mais de 50 instâncias em grandes eventos ◆ Foi diminuído o número para 24 instâncias e diminuiu demais a necessidade de escala da app