Comparando sessões de criação de perfil no administrador XHProf

O artigo fala sobre uma ferramenta conveniente para comparar sessões para criar um perfil do código PHP, o que tornou possível encontrar rapidamente gargalos em um projeto no Bitrix CMS.


De longe


Em julho, o Bitrix foi atualizado para a versão mais recente naquele momento ... E a velocidade de carregamento da página caiu: em algum lugar em 20%, em algum lugar em mais de 300%. Especialmente nas etapas de pedidos dos clientes.


Os números são impressionantes e tristes. Por que atualizado?


N | Sólido


I.e. havia o risco de que, se não atualizássemos, teríamos que resolver dois problemas ao mesmo tempo: atualizando o Bitrix e atualizando nossa base de código para PHP> 7.1.


Razão dos freios


O motivo dos maiores freios, como se viu, é a nova lógica de código para trabalhar com perfis de entrega. De acordo com o código, eles fizeram isso mais corretamente, ou algo assim: os envios apareceram como entidades separadas. Agora, o pedido pode ser enviado em várias remessas (com características próprias em termos de custo, método de entrega e composição de mercadorias).


No entanto, agora o perfil de entrega é uma entrada separada no banco de dados com suas limitações do kernel Bitrix, que será exibida toda vez que você precisar verificar a possibilidade de mostrar esse perfil ao fazer um pedido.


Em geral, o artigo não focará exatamente no que foi refeito para lidar com os freios, mas em uma ferramenta que possibilitou encontrar rapidamente gargalos no código e corrigi-los.


XHProf Admin


À nossa disposição havia um perfilador popular do Facebook - XHProf. As desvantagens que inibem a operação da ferramenta estão relacionadas à sua GUI:


  • Falta de navegação clara entre as sessões de criação de perfil
  • Incapacidade de comparar mais de duas sessões simultaneamente fora do mesmo espaço para nome.
  • Você não pode fazer comentários sobre eles na lista de sessões. Após a décima sessão, você já esquece a que alterações os resultados anteriores da criação de perfil estão relacionados.

Como resultado, observando as FONTES da GUI nativa do XHProf e, um pouco horrorizada, uma nova GUI foi escrita para ela, cobrindo as desvantagens acima.


Instalação


Link para o projeto


Não vou descrever como instalar o XHProf e o perfil, existem pelo menos alguns bons tutoriais no Habré.


Para instalar o XHProf Admin, coloque a pasta xhprof_admin na pasta xhprof_html do XHProf nativo. Ou clone o projeto inteiro (ele já contém o XHProf e a nova GUI).


Em seguida, abra a página <Path to xhprof> / xhprof_html / xhprof_admin /
Se o mapeamento estiver ativado, conforme recomendado na documentação, você deverá abrir <Path to xhprof> / xhprof_admin /


Página inicial


N


Contém:


  • Listar todas as sessões de criação de perfil classificadas por data
  • Campos de comentário da sessão
  • Jackdaws com as quais você pode selecionar sessões para excluir, comparar, agregar
  • Link para um novo relatório
  • Links para relatório nativo e callgraph
  • Campos de ponderação da sessão para Diff e Agregate
  • Um campo que especifica a sequência na qual as sessões serão exibidas no modo Comparar e também no modo Dif.
  • Botões:
    • Comparar - compara as sessões selecionadas (novo relatório)
    • Diff - um relatório padrão para comparar sessões em um espaço para nome
    • Agregado - relatório padrão com agregação de sessão em um espaço para nome
    • Salvar comentários personalizados - salva o comentário da sessão (em um arquivo separado)
    • Excluir execuções selecionadas - exclui arquivos de sessão e arquivos de comentários
    • Link para a página de listagem da sessão nativa

Exibir relatório original, Execuções difusas, Execuções agregadas, Exibir gráfico de chamadas - recursos nativos da GUI do XHProf - Não os descreverei. Só posso dizer que o XHProf Admin permite navegar convenientemente até eles, em vez de compilar manualmente os links.


Comparar corridas


N | Sólido


Um novo relatório que permite avaliar rapidamente o crescimento ou a regressão da produtividade.
Para usá-lo, na página principal:


  • Selecione as sessões que queremos comparar.
  • Definimos o campo de classificação "Classificar" para determinar a ordem em que as sessões são exibidas: quanto menor o valor do campo, mais cedo a sessão será exibida. A primeira sessão será tomada como base - todas as sessões subsequentes serão comparadas com ela.
  • Se quisermos exibir os valores médios das métricas, marque "mostrar média".
  • Clique em "Comparar".
    N | Sólido

O relatório não mostra a% que a função "ocupa" para cada métrica, para não confundir a página, mas exibe valores absolutos. Se houver uma diferença de mais de 1% na métrica para a função sendo traçada entre a sessão base e a subseqüente, isso será mostrado claramente: verde indica melhoria, vermelho indica regressão.


Por padrão:


  • O relatório exibe as 100 primeiras funções. Se você precisar de mais, clique em "exibir tudo".
  • Os dados são classificados pelo "Incl. Wall Time (microsec) ", mas você pode clicar em qualquer métrica e classificá-la.

Para excluir uma sessão do relatório, clique em "excluir".


A classificação por cada métrica está disponível - basta clicar no cabeçalho da coluna.


Para exibir os valores médios para todas as sessões selecionadas, clique em "Mostrar valores médios".


Para uma pesquisa detalhada de uma função, você pode clicar em uma célula na interseção da função e na métrica com a sessão mostrada.


N | Sólido


Exemplo de uso


  1. Iniciamos o criador de perfil no código fonte. Abrimos a lista de sessões e adicionamos um comentário a ela.
  2. Iniciamos o criador de perfil no código aprimorado. Também adicionou um comentário.
  3. Fiz o item 2 várias vezes.
  4. Em seguida, abrimos a lista de sessões de criação de perfil, selecionamos sequencialmente todas as sessões e clicamos em Comparar.
  5. Nós olhamos as mudanças.
  6. Eles decidiram o que mais acelerar.

O XHProf Admin é convenientemente usado para identificar funções pesadas comumente usadas que são executadas por um único usuário. Por exemplo, no Bitrix, ao fazer um pedido ao passar de um estágio para outro (entrega, pagamento, contatos etc.) toda vez que várias funções são chamadas para controlar a integridade da cesta, etc. Esses estágios são analisados ​​em perfil separadamente e exibidos juntos no relatório Compare. Os resultados dessas funções podem ser armazenados em cache, acelerando significativamente o tempo de transição de um estágio para outro.


Sumário


Como resultado, nivelamos a queda de velocidade nas etapas de solicitação de atualização do Bitrix, analisando simultaneamente outras seções do site e acelerando-as.
Periodicamente, usamos o XHProf Admin em projetos como uma GUI mais intuitiva.
Link da documentação para XHProf Admin:


Quem estiver interessado no tópico de otimização de código e ferramentas para isso, escreva nos comentários.

Source: https://habr.com/ru/post/pt478858/


All Articles