Como visualizar o desempenho do seu aplicativo com um gráfico de chama SVG
Publicados: 2023-02-21Gráficos de chama SVG são uma ótima maneira de visualizar o desempenho de seu aplicativo. Ao exibir o tempo gasto em cada função, você pode identificar rapidamente as áreas do seu código que estão consumindo muito tempo. Para exibir um gráfico de chama SVG, você precisará usar uma ferramenta que possa gerar um. Existem muitas ferramentas de código aberto disponíveis, como o flamegraph.io. Depois de gerar seu gráfico de chama, você pode incorporá-lo em seu site ou blog usando uma tag. Você também pode usar uma ferramenta como o Planilhas Google para exibir seu gráfico de chama. Simplesmente crie uma nova planilha, selecione “Inserir > Imagem” e cole a URL do seu gráfico de chama.
Como você executa um gráfico de chama?
Para executar um gráfico de chama, você precisa ter algumas coisas instaladas em seu computador. A primeira coisa que você precisa é o navegador Google Chrome. Em seguida, você precisa instalar a extensão Flame Graph. Depois de instalar essas duas coisas, você precisa abrir o navegador Google Chrome e ir para a página da extensão Flame Graph . A partir daí, você precisará clicar no botão “Create a new Flame Graph”. Isso abrirá uma nova guia na qual você precisará inserir a URL do site para o qual deseja criar um gráfico de chama. Depois de inserir o URL, você precisará clicar no botão "Criar gráfico de chama". Isso levará alguns instantes para criar o gráfico de chama. Assim que terminar, você poderá ver os resultados.
O gráfico de chama exibe um rastreamento de solicitação distribuído e um resumo de cada chamada de serviço que ocorreu durante a execução da solicitação. Gráficos de chama de rastreamentos distribuídos mostram dados de latência e erro para ajudar os desenvolvedores a identificar gargalos em seus aplicativos. O artigo fornece uma explicação de como interpretar um gráfico de chama, bem como um exemplo, bem como outros métodos para traçar traços distribuídos. O eixo Y exibe a profundidade da pilha de chamadas (o número de chamadas). Ao clicar em um span em um gráfico de chama, você normalmente verá um resumo da duração e do erro associado à chamada. Você pode encontrar métricas, logs, dados de desempenho de rede, pontos de acesso de código e outras informações contextuais clicando nas guias abaixo do gráfico de chama. O diagrama espiral é formado por um círculo rodeado por um conjunto de anéis. Gráficos de chama podem ser usados para visualizar os métodos e caminhos de código usados para atender a uma solicitação de um criador de perfil de código. As ferramentas de rastreamento de distribuição e monitoramento de desempenho de aplicativos do Datadog permitem que você acompanhe o caminho de todas as solicitações em todos os serviços.
Os gráficos de chama oferecem aos desenvolvedores uma maneira rápida e fácil de ver problemas de desempenho
Gráficos de chama podem ser usados por desenvolvedores para visualizar o desempenho de aplicativos distribuídos em questão de segundos. Os gráficos de chama podem ajudar os desenvolvedores a identificar e corrigir problemas de desempenho, fornecendo uma representação gráfica do rastreamento de solicitação e destacando onde o aplicativo teve problemas.
Como você pesquisa no Flamegraph?
Existem algumas maneiras diferentes de pesquisar no flamegraph. Uma maneira é usar a caixa de pesquisa localizada no canto superior direito da tela. Esta caixa de pesquisa permite que você digite palavras-chave que serão usadas para pesquisar o flamegraph. Outra maneira de pesquisar no flamegraph é usar a função de navegação. Esta função pode ser encontrada no lado esquerdo da tela. Esta função permite navegar pelas diferentes categorias de flamegraph.
Com o advento dos gráficos de chama, agora é mais fácil pesquisá-los. Há um caminho de código de gravação sob o grande quadro TCP_send() à direita. Se você clicar em um dos quadros destacados, poderá ver por que isso pode ocorrer. Tcp_Send esteve presente em 59,1% das amostras testadas. Outros termos intrigantes a serem procurados incluem re?cv, spin, copy e x.
Por que é chamado de gráfico de chama?
Ao criar uma visualização, Neelakanth e Roch usaram cores completamente aleatórias. A CPU estava quente (ocupada), o que explica por que escolhi apenas cores quentes primeiro. Por se assemelhar a chamas, os gráficos de chama rapidamente se tornaram populares.
Os perigos das chamas
O evento ardente é uma maneira divertida de liberar a frustração e iniciar uma discussão animada. Eles também podem levar a um colapso nos relacionamentos e fazer com que as pessoas desmoronem.
A melhor maneira de lidar com as chamas é ignorá-las. Alguém pode acender uma chama; você deve ser aquele que o ignora. Não há necessidade de responder. Não vale a energia gasta.
A chama pode ser uma forma divertida de se comunicar, mas também pode ser prejudicial em alguns casos se usada incorretamente. Você não precisa ter medo das chamas; em vez disso, você deve evitá-los e manter a calma.
Quem inventou Flamegraphs?
Os gráficos de chama tornaram-se uma ferramenta importante para análise de desempenho em muitos idiomas, bem como no Netflix e em outros setores. Seu autor, Brendan Gregg, criou o Flame Graph, que foi publicado na edição de junho de 2016 da Communications of the ACM.
Visualizador de gráfico de chama
Um visualizador de gráfico de chama é um tipo de software que permite aos usuários visualizar dados na forma de um gráfico. Este software é frequentemente usado para solucionar problemas com computadores ou outros dispositivos.
Você pode usar o speedscope para ver grandes perfis de desempenho de maneira baseada na web. O FlameGraphs de Brendan Gregg foi inspirado no painel de desempenho das ferramentas de desenvolvedor do Chrome. Os dados do sistema não são repassados para nenhum servidor e são executados totalmente no navegador. O Chrome e o Firefox devem funcionar com todas as plataformas (embora eu tenha testado apenas o Mac). Na visualização pesada à esquerda, pilhas idênticas são agrupadas independentemente de terem sido gravadas sequencialmente. A pilha de cada pai é classificada de forma que sua pilha mais pesada esteja à esquerda – daí o rótulo canhoto. Uma visualização detalhada da situação o ajudará a entender onde você está em termos de quantas chamadas de função você tem em uma determinada situação.
Rudro Samanta tem usado o speedscope para visualizar perfis de aplicativos iOS capturados usando o Xcode. Jest é usado para escrever casos de teste, Travis CI é usado para integrar código continuamente, Coveralls é usado para relatórios de cobertura de teste, Parcel é usado para transformar o código-fonte e prettier é usado para formatar automaticamente o código. Uma maneira de conseguir isso é aumentar o número de formatos que o speedscope pode importar e uma maneira de tornar as integrações mais rígidas. Estou trabalhando no speedscope há nove meses e sinto que deixei isso escapar de mim. Como engenheiro, vou me esforçar para criar sistemas e conjuntos de ferramentas que sejam sustentáveis, compreensíveis e úteis para ajudar as pessoas a resolver problemas complexos em todo o mundo. Acredito que vou dedicar mais tempo a projetos criativos e colaborativos este ano.
Gráfico de chama on-line
Um gráfico de chama é uma representação gráfica de dados de criação de perfil, normalmente usado para mostrar características de desempenho de programas de software. A altura de cada seção representa a quantidade de tempo gasto nessa seção específica do código. As seções são ordenadas da esquerda para a direita de acordo com o momento em que foram chamadas.
Ao contrário de árvores e gráficos, os gráficos de chama usam o espaço da tela de forma eficaz, apresentando uma grande quantidade de informações em um formato pequeno. Ao clicar aqui, você aprenderá como converter uma árvore em um gráfico de chama, bem como quais são as principais características de um gráfico de chama. Gráficos de chama são usados no Google Cloud Profiler para exibir dados de criação de perfil. Quando você segue uma pilha de chamadas, as larguras dos quadros diminuem porque o tempo total de CPU de um chamado não pode ser maior que o tempo de CPU de outro chamado. A forma da chama é causada por esse comportamento. O gráfico de chama agora aparece da seguinte maneira após remover o excesso de espaço em branco e colorir os quadros usando o tempo de CPU próprio. Embora as pilhas de chamadas para foo1 e foo2 tenham sido preservadas, a pilha que começa com foo2 e termina com foo1 agora está localizada próxima ao quadro.
Como você faz um gráfico de chama?
Para gerar gráficos de chama, você deve primeiro amostrar o rastreamento de pilha. Tradicionalmente, ele foi dividido em dois tipos: perfis de sistema, como Linux perf, que mostram caminhos de código de sistema (por exemplo, JVM GC, syscalls, TCP), mas não perfis Java. Profilers JVM, como hprof, lJP e profilers comerciais, estão disponíveis.
Gráfico de Chama vs Gráfico de Chama
Existem algumas diferenças importantes entre um gráfico de chama e um gráfico de chama. Um gráfico de chama normalmente mostra uma linha do tempo de eventos, enquanto um gráfico de chama mostra um rastreamento de pilha. Os gráficos de chama são frequentemente usados para depurar problemas de desempenho, enquanto os gráficos de chama são mais comumente usados para visualizar dados de desempenho. Os gráficos de chama são uma ótima maneira de ver como um programa está gastando seu tempo. Eles podem mostrar onde estão os gargalos e como o programa está usando os recursos. Gráficos de chama são uma ótima maneira de ver como um programa está usando recursos.
Como uma técnica grosseira, mas útil para determinar quais caminhos de código são quentes (porque estão ocupados na CPU), a criação de perfil em uma taxa fixa produz bons resultados. Os gráficos de chama permitem que você identifique rapidamente caminhos de código quente por amostragem de rastreamentos de pilha. Meus exemplos Linux perf (perf_events) e DTrace são exemplos de software que você pode instalar. FlameGraph é uma ferramenta Perl que gera um SVG interativo e permite ver detalhes arrastando e soltando sobre as imagens. A visualização pode parecer semelhante a outras de criadores de perfil, mas difere deles em alguns aspectos. Como isso foi inicialmente usado para visualizar o que está quente na CPU, ele foi chamado de gráfico de chama. Confira a seção eBPF profile(8) para obter um método de baixo custo para execução em kernels Linux mais recentes (eBPF profile(8) não é recomendado).
Consulte a seção Flame Graphs da minha página perf_events para obter mais informações sobre perf. É possível gerar uma saída dobrada diretamente do relatório perf do Linux 4.5 incluindo um modo dobrado, que só é acessível usando stackcollapse-perf.pl. Um lint do kernel (-a) e do usuário (-d) separados pelas pilhas do usuário e do kernel (-f) é fornecido nesta amostra a 99 Hertz (-F 99) e há um limite de tempo de 60 segundos para as amostras. Gráficos de chama podem ser gerados usando SystemTap v1.7 no Fedora 16. O cronômetro também pode ser usado para amostrar rastreamentos de pilha. Esta sondagem de perfil é executada na taxa de clock do sistema (CONFIG_HZ). O SystemTap pode usar seu recurso de agregação systemTap para agregar no kernel e passar um relatório (menos detalhado) para os usuários.
Os gráficos foram gerados usando KVM (host Ubuntu) (32 bits) em um convidado Fedora 16 (com uma CPU virtual). No bare metal, alguns caminhos de código e proporções de amostra serão muito diferentes. É possível clicar sobre os elementos nos dados de criação de perfil para ver porcentagens (mas não clicar para ampliar, pois esta é uma nova versão), mas não para aumentar o zoom. O gráfico é uma excelente ferramenta para aprender mais sobre os componentes internos do Linux. Em um host hypervisor de kernel illusmos, tanto o usuário quanto a pilha de kernel podem ser vistos neste exemplo. As versões SVG e PNG independentes também estão disponíveis. Para observar como o tempo do kernel é alocado para criar processos de curta duração, executei uma carga de trabalho desse gráfico de chama.
Um gráfico de chama é normalmente usado para identificar a carga de interrupção do kernel exibindo o cabelo. O NUMA Balancing no Ubuntu versão 1716 consome mais da metade dos ciclos da CPU para equilibrar a memória entre os nós, resultando em um desempenho lento. Uma reescrita do gráfico de chama em D3 é essencial para manter as ordens de mesclagem constantes sem ter que regenerar o gráfico de chama. Em minha palestra JavaOne 2016 Java Performance Analysis on Linux with Flame Graphs, abordo as técnicas mais recentes para produzir gráficos de chama de modo misto usando Linux perf. O JDK8u60 inclui um recurso chamado /PreservePointerFrame que permite gerar gráficos perf e flame. JDK-8068945 foi adicionado à biblioteca JDK como um hot patch para criação de perfil de pilha (ponteiro de quadro). Ao usar o registro RBP como um ponteiro de quadro no código compilado para x64, ele é considerado o ponteiro de quadro adequado.
Ao executar o DTrace como um método Jstack, ele pode rastrear pilhas em nível de usuário, bem como métodos e classes Java. Para programas Java, Stackcollapse.pl e flamegraph.pl são usados para gerar gráficos de chama da CPU . Algumas versões da JVM não suportam o auxiliar ustack, que tem vários problemas. Ele funciona com qualquer combinação de rastreamento de pilha mais valor, não apenas rastreamentos de pilha com contagens de CPU. O primeiro problema é que Jstack() pode não ser capaz de percorrer as pilhas corretamente devido ao bug JDK-6260864, que foi arquivado em 2005 e ainda não foi corrigido em 2014. Esse bug faz com que a maioria das pilhas de amostra em minhas cargas de trabalho de produção sejam quebrar. Você pode obter informações sobre a alocação de memória do dispositivo, E/S do dispositivo, padrões de syscall, eventos fora da CPU e chamadas de função específicas. Se algum deles for usado, um rastreamento de pilha pode ser obtido com o valor relevante: contagens, bytes ou latência. Os gráficos de chama também podem ser visualizados na página Gráficos de chama.
Gráfico de chama Java
Um gráfico de chama é um tipo de visualização de dados usado para representar o desempenho de um programa de software. É um gráfico que mostra a quantidade de tempo que um programa gasta em cada função. A altura das barras representa a quantidade de tempo que o programa gasta naquela função. A largura das barras representa a quantidade de tempo que o programa gasta naquela função em relação às outras funções.
Gráficos de chama surgiram recentemente como uma nova maneira popular de visualizar o uso da CPU em Java. Eles podem ser criados usando o criador de perfil Java leve do Google (code.google.com) e meu software de gráfico de chama (github). É bom que os gráficos de chama não sejam um recurso separado dos criadores de perfil Java no futuro. Nesta postagem de blog, veremos um método baseado em JVMTI somente em Java que, embora funcione, tem algumas limitações. Jeremy Manson criou um criador de perfil Java leve que pode ser usado para amostrar a CPU. Este relatório de amostra é gerado quando o java inicia até que ele saia, com um arquivo trace.txt anexado a ele. Para executar o programa, existem alguns custos.
Para o meu programa, foi menor (um aumento de apenas 1% na taxa de solicitação e um aumento de 7% no consumo de CPU). Se a taxa de amostragem deve ser reduzida, consulte as seções subseqüentes. A saída do programa flamegraph.pl pode ser personalizada com uma variedade de opções (lista -h), incluindo o título. O criador de perfil honesto de Richard Warburton, que se baseia na mesma técnica de criação de perfil, também é útil. É possível que eu reduza a taxa de amostragem de 100 hertz para 50 hertz ou menos se pretendo coletar grandes quantidades de dados por um longo período de tempo.