13 Software de Criação de Perfil para Depurar Problema de Desempenho do Aplicativo

Publicados: 2021-04-10

O objetivo do seu aplicativo é servir bem aos usuários finais.

Deve ser rápido, ágil, fácil de usar e confiável, entre outras funcionalidades desejáveis.

Mas manter seu software de uma maneira que continue a oferecer desempenho de alto nível não é tão fácil.

Quando seu código começa a chamar funções desnecessárias, tropeça em si mesmo, detecta bugs e entra em loops extras, isso pode resultar em ineficiências. Seu aplicativo pode ficar lento, não responder ou se comportar de maneira irregular.

E se você não corrigir esses problemas, o desempenho geral do aplicativo será prejudicado.

Conseqüentemente, seus clientes podem ficar irritados ou parar de usar seu aplicativo devido ao baixo desempenho e à baixa velocidade. Isso não apenas degrada sua reputação, mas também lhe custa em termos de receita e lucros. Portanto, seu código precisa ser analisado, revisado e depurado para atingir o desempenho ideal. E a maneira mais rápida de fazer isso é usando uma ferramenta de criação de perfil de software para monitorar e depurar seus códigos e eliminar gargalos relacionados ao desempenho.

Neste artigo, você aprenderá sobre a criação de perfis de software e como isso pode ajudá-lo. E então, eu o orientarei por algumas das melhores ferramentas de criação de perfil para depurar seu aplicativo e otimizar seu desempenho.

O que é Perfil de Software?

O perfil de software é uma análise dinâmica de código onde o comportamento de um programa é investigado usando os dados coletados enquanto o programa é executado. O objetivo é determinar várias seções do programa que você deve otimizar para aumentar a velocidade do aplicativo, capacidade de resposta e diminuir o consumo de memória e recursos.

Um criador de perfil de software geralmente mede a duração e a frequência das chamadas de função junto com a complexidade de memória ou tempo associada a um programa. Também existem perfis específicos disponíveis, como perfis de memória.

A criação de perfil geralmente é realizada instrumentando o código-fonte do programa. Os criadores de perfil podem usar diferentes técnicas de criação de perfil, como métodos instrumentados, baseados em eventos, estatísticos ou de simulação.

Por que a criação de perfis de software é importante?

O perfil de software é necessário para determinar o uso de recursos e o tempo de execução associado a uma função específica. Ajuda a otimizar a velocidade do programa e, ao mesmo tempo, garante que ele consuma o mínimo de recursos.

Além disso, é feito para rastrear e otimizar o uso da CPU e o tempo de execução do comando.

Portanto, é necessário escolher a ferramenta de criação de perfil de software certa para garantir que você possa depurar os problemas relacionados ao desempenho mais rapidamente para melhorar sua eficiência e fornecer uma melhor experiência ao usuário final. Muitos criadores de perfil também vêm com relatórios detalhados e gráficos e visualizações interativos que ajudam a encontrar a causa raiz exata dos problemas, tornando mais fácil resolvê-los.

Portanto, aqui está uma lista de alguns dos melhores criadores de perfis de software que você pode experimentar e diga-nos o que funcionou melhor para você.

py-espião

py-spy é um excelente gerador de perfil de amostra para Python. Isso permite que você tenha uma prévia de todas as coisas em que seu aplicativo baseado em Python passa o tempo.

Para isso, você não precisa modificar seus códigos ou reiniciar o programa completamente. py-spy envolve baixo overhead e é desenvolvido em Rust para executar maior velocidade. Ele não foi desenvolvido para operar no mesmo processo em que seu programa baseado em python com perfil é executado. Isso implica que o py-spy é altamente seguro e protegido para usar contra os códigos de produção baseados em Python.

A ferramenta permite gravar perfis, gerar gráficos em degradê para criar arquivos SVG interativos. Você também pode visualizar outras opções, como alterar as taxas de amostragem, extensões nativas C para criação de perfil, subprocessos, thread-ids e muito mais. Você pode obter uma visualização ao vivo das funções que acontecem em seus programas usando o comando 'top' e exibir a pilha de chamadas atual usando o comando 'dump' para cada thread do Python.

Ele suporta todas as versões do interpretador CPython, como 2.3 - 2.7 e 3.3 - 3.8. Você pode instalar o py-spy a partir do PyPI ou do GitHub.

Piroscópio

O software de criação de perfil contínuo de código aberto do Pyroscope ajuda a depurar todos os problemas de desempenho em seu aplicativo em minutos.

Você pode iniciar o servidor seguido pelo agente, não importa o que você use, Docker, Linux, ou esteja procurando por documentos Ruby ou Go, o Pyroscope cobre você. Mesmo que você tenha como objetivo dez segundos ou dez meses de dados de criação de perfil de software, seu mecanismo de armazenamento personalizado faz consultas rápidas.

Você não precisa se preocupar com a sobrecarga ou o desempenho do aplicativo, pois eles usam a tecnologia de criação de perfil de amostragem que não afeta o desempenho. O Pyroscope armazena seus dados de perfil de forma eficiente; portanto, é econômico para você, mesmo se desejar armazenar diferentes dados de perfil de vários aplicativos durante anos.

Ele funciona em macOS, Linux e Docker e oferece suporte a programas escritos em Python, Go e Ruby.

Bubbleprof

Bubbleprof by Clinic.js fornece uma maneira nova e única de criar um perfil de seu software escrito em Node.js. Ele usa uma IU de 'bolha' que ajuda todos, de especialistas a iniciantes, a determinar o tempo assíncrono gasto em seu aplicativo.

Ele visualiza como seus processos Node.js operam observando suas operações assíncronas, agrupando-as, calculando os atrasos e mapeando-as.

O Bubbleprof determina os tempos de operação observando o tamanho das bolhas dentro de um grupo específico de operações que pode ser seu código, um núcleo de nó ou um módulo. Também agride os grupos adjacentes para diminuir a desordem.

Para calcular os atrasos conforme a operação flui de um grupo para outro, o Bubbleprof mede o comprimento da seta que conecta as bolhas. Além disso, também utiliza cores diferentes nos processos de medição. Simultaneamente, as linhas coloridas internas representam uma mistura de tipos de operação assíncrona como a causa do atraso.

Pyinstrument

Otimize seus códigos Python com Pyinstrument.

Ele mostra por que seu código Python é lento e ajuda a diagnosticar os problemas para que você possa ter aquele desempenho extremamente rápido.

Para usar o Pyinstrument, você não precisa escrever um script Python; basta chamar Pyinstrument usando a linha de comando diretamente. Seu script seria executado normalmente e a ferramenta geraria um resumo colorido das áreas em que o aplicativo gastou seu tempo. Ele também vem com uma API Python que torna o processo ainda mais fácil.

Você também tem a opção de criar perfis de solicitações da web no Flask e no Django, para os quais eles mantiveram uma documentação elaborada. Aqui, observe que o Pyinstrument oferece perfis estatísticos que registram a pilha de chamadas a cada 1 ms em vez de rastrear todas as chamadas de função feitas por seu programa.

É vantajoso, pois os criadores de perfis estatísticos envolvem menor sobrecarga em comparação com os criadores de perfis de rastreamento. À medida que grava toda a pilha, o rastreamento de chamadas de funções caras torna-se fácil. Além disso, Pyinstrument também oculta (por padrão) frames de biblioteca, permitindo que você se concentre em aplicativos ou módulos responsáveis ​​por afetar o desempenho.

A depuração de problemas de desempenho é facilitada porque o Pyinstrument registra o tempo gasto usando o tempo de 'relógio de parede'. A ferramenta rastreia todo o tempo do programa para ler arquivos, baixar dados, comunicar-se com um banco de dados, etc.

Xdebug

Para melhorar os problemas de desempenho do seu código e tornar sua experiência de desenvolvimento um pouco mais divertida, o Xdebug vem com recursos abrangentes para criação de perfil e depuração.

Na verdade, é uma extensão de PHP que permite encontrar os gargalos em seu aplicativo PHP e analisar seu desempenho usando ferramentas de visualização externas para gerar gráficos de desempenho.

O Xdebug cria uma saída detalhada mostrando o caminho do aplicativo para chegar a um erro, incluindo os parâmetros que ele passou para uma determinada função. Isso é feito para rastrear os erros. Para ajudar um desenvolvedor a entender as coisas com clareza, ele gera informações codificadas por cores junto com visualizações estruturadas.

Ele também vem com um depurador remoto que você pode usar para conectar o Xdebug a um código em execução, IDE ou navegador para ver os pontos de interrupção do código e executar os códigos linha por linha. Outro recurso que oferece é a cobertura de código que mostra o quanto o código do seu programa foi executado e também ajuda você com testes de unidade.

SPX

Simple Profiling eXtension (SPX) é uma extensão de criação de perfil projetada para PHP. Ele possui algumas propriedades exclusivas, o que o diferencia de outras extensões de criação de perfil. É totalmente GRATUITO de usar e restrito apenas à sua infraestrutura, o que significa que não há risco de vazamento de dados.

A simplicidade do SPX o torna muito fácil de usar: tudo que você precisa é definir uma linha de comando ou variável de ambiente para criar o perfil de um script. Ou você também pode ativar o botão de opção em uma página da web para criar o perfil do script. Como resultado, você não precisa instrumentar seu código manualmente.

Ele também oferece suporte a um script de linha de comando em execução - Ctrl-C. Além disso, esse processo também elimina a necessidade de usar um iniciador de linha de comando ou extensão de navegador dedicada. O SPX oferece suporte a várias métricas de cerca de 22, incluindo várias métricas de tempo e memória, objetos, arquivos em uso, E / S, etc.

Ele pode coletar dados sem sair do contexto. Sua IU da web permite configurar / habilitar a criação de perfil para a sessão do navegador atualmente em uso e lista todos os detalhes e relatórios do script com perfil. A IU da web permite selecionar um relatório específico para uma análise mais profunda e apresenta algumas visualizações interativas, como Flamegraph, perfil simples e linha do tempo, que podem ser dimensionados para chamadas de função em milhões.

Prefixo

Prefix by Stackify é um criador de perfil de código leve e fácil de instalar que muitos desenvolvedores adoram. Ele ajuda a eliminar os gargalos no desempenho do aplicativo para otimizá-lo e melhorar a experiência do usuário.

Os recursos superiores de rastreamento e criação de perfil do Prefix permitem que você encontre rapidamente exceções ocultas, consultas SQL lentas e muito mais. Ele fornece a seus desenvolvedores o verdadeiro poder do APM (monitoramento de desempenho de aplicativos). Para isso, o Prefix valida o desempenho do código da maneira como está escrito e permite que você envie códigos de melhor desempenho para teste.

Dessa forma, ele recebe menos tíquetes de suporte do lado da produção e ajuda os gerentes de desenvolvimento a atingir as metas mais cedo. Descubra todas as consultas de baixo desempenho, gargalos desconhecidos e consultas geradas por ORM.

Você também pode rastrear cada parâmetro de chamada SQL, baixar os tempos e visualizar os registros afetados. Prefixo simplifica a localização de padrões N + 1 também. Esqueça a classificação em todos esses registros bagunçados; reúna-os para localizar os problemas facilmente.

Prefixo permite que você encontre o contexto de um log suspeito dentro de uma solicitação de consulta diretamente e pule de um log para um rastreamento para depuração sem esforço. Prefix esclarece dependências de baixo desempenho, o que é útil para localizar exceções ocultas e trabalhar com código legado ou seções de estrutura. Essas dependências podem ser serviços da web, serviços de terceiros, serviços de cache e outros.

Prefix funciona em Windows e Mac e oferece suporte a .Net, Ruby, Java, PHP, Python e Node.js.

Escaleno

O Scalene é uma GPU, CPU e perfilador de memória de alta precisão e alto desempenho para programas baseados em Python. Ele oferece várias vantagens em relação a outros criadores de perfil, como executar ordens de magnitudes mais rápidas e fornecer informações mais detalhadas.

O Scalene é incrivelmente rápido e utiliza amostragem em vez de instrumentação. Ele nem mesmo depende dos recursos de rastreamento do Python. Além disso, sua sobrecarga costuma ser inferior a 10-20%. Essa ferramenta executa o perfil de software no nível da linha e aponta para as linhas de códigos responsáveis ​​pelo tempo de execução do seu programa.

Esses detalhes são mais valiosos do que aqueles no perfil de nível de função. O Scalene separa o tempo gasto puramente em Python daquele do código nativo que inclui bibliotecas. Como a maioria dos programadores Python não otimiza o desempenho do código nativo, os desenvolvedores podem concentrar seus esforços na otimização de códigos que você pode realmente melhorar.

Ele destaca os pontos de acesso em vermelho que tornam mais fácil localizar o tempo de CPU / alocação de memória e separar facilmente o tempo do sistema para localizar problemas de E / S. O Scalene pode relatar o tempo de GPU, perfis de uso de memória e rastrear o uso de CPU. O Scalene também pode identificar possíveis vazamentos de memória, volume de cópia de perfil e gerar perfis reduzidos para linhas de código que consomem mais de 1% da CPU.

VisualVM

A ferramenta multifuncional de solução de problemas para Java, VisualVM, foi projetada para ser usada nas fases de produção e desenvolvimento. É um software visual que integra funcionalidades leves de criação de perfil e ferramentas JDK de linha de comando.

O VisualVM monitora aplicativos executados em Java 1.4+ e os soluciona usando várias tecnologias, como JMX, jvmstat, Attach API e Serviceability Agent. Esta ferramenta é perfeita para diferentes requisitos de engenheiros de qualidade, administradores de sistema e usuários finais.

Ele detecta aplicativos baseados em Java em execução remota e local automaticamente e os relaciona. A ferramenta também permite definir os programas manualmente usando a conexão JMX. Para cada processo, ele mostra dados de tempo de execução típicos, como PID, argumentos passados, início JDK, classe principal, sinalizadores de JVM, versão de JVM e propriedades de sistema e argumento.

VisualVM monitora o uso da CPU, heap e metaspace ou memória de geração permanente, execução de threads e classes carregadas em um aplicativo. Ele exibe todos os threads em execução em uma linha do tempo com tempos agregados de suspensão, execução, estacionamento, monitoração e espera.

Os perfis de instrumentação e amostragem podem ser executados usando VisualVM para gerenciamento de memória e desempenho de aplicativos. Ele exibe despejos de thread para fornecer uma visão rápida dos processos. Ele também exibe e cria instantâneos .hprof sob demanda para ajudá-lo a descobrir ineficiências de uso de heap e depurar vazamentos de memória.

Além disso, VisualVM pode ler dados básicos em um processo baseado em Java travado junto com seu ambiente. Você pode analisar seus aplicativos offline; ele pode salvar o ambiente de tempo de execução e configuração do aplicativo com despejos de heap obtidos, despejos de encadeamento e instantâneos de criação de perfil que você pode processar offline em um estágio posterior.

Funciona em Windows, Linux e Unix.

Orbit Profiler

Visualize seu aplicativo C / C ++ e encontre problemas de desempenho rapidamente usando o Orbit Profiler. Esta é uma ferramenta de depuração e criador de perfil autônomo que visa ajudar os desenvolvedores a visualizar e compreender o fluxo de execução do aplicativo complexo.

Ele fornece uma visão nítida de tudo o que está acontecendo dentro do aplicativo para que você possa eliminar rapidamente os gargalos de desempenho e restaurar o alto desempenho do seu aplicativo.

O Orbit Profiler pode funcionar em qualquer aplicativo C ou C ++ de maneira eficiente, desde que possa acessar o arquivo PDB. Em seguida, ele iniciará a criação de perfil assim que você concluir o download do programa. A ferramenta salta para o processo de destino, conecta-se às funções selecionadas e executa o perfil.

Ele pode até mesmo funcionar em suas compilações finais ou de envio otimizadas. Além da instrumentação dinâmica, o Orbit Profiler também oferece recursos de amostragem "sempre ativos", que são rápidos, estão disponíveis o tempo todo e são robustos.

Funciona em Windows e Linux.

Uber JVM Profiler

Com recursos avançados de criação de perfil, o Uber JVM Profiler é outra boa opção para seus aplicativos baseados em Java.

Ele oferece um Agente Java que coleta vários rastreamentos de pilha e métricas para processos Spark / Hadoop JVM de maneira distribuída, por exemplo, métricas de memória / CPU / IO.

A ferramenta pode rastrear argumentos e métodos java em códigos de usuário sem alterá-los. Você também pode usá-lo para rastrear a latência de chamada de nós de nome HDFS para cada aplicativo Spark e encontrar problemas. Ele pode até rastrear os caminhos de arquivo HDFS do aplicativo Spark para descobrir arquivos importantes e realizar otimizações adicionais.

O Uber JVM Profiler foi criado originalmente para criar perfis de aplicativos Spark que geralmente incluem muitas máquinas ou processos para um aplicativo. Conseqüentemente, as pessoas podem correlacionar métricas facilmente para essas máquinas ou processos.

No entanto, a ferramenta funciona como um Agente Java típico e você pode usá-la para qualquer um de seus processos JVM. Seus recursos incluem:

  • Depuração do uso de memória de executores de aplicativo Spark, como memória heap java, memória nativa, memória não heap, pool de buffer e pool de memória
  • Depuração de uso de CPU e tempo de coleta de lixo
  • Depuração de métodos de classe java para sua frequência e tempo ou perfil de duração
  • Criação de Perfil de Argumento (depuração e rastreamento de chamada de método da classe java e seu valor de argumento)
  • Stacktrack Profiling e geração de Flamegraphs para tempo de CPU
  • Depuração de métricas de I / O e métricas de thread JVM

Tracy

Tracy é uma ferramenta útil para ajudar os desenvolvedores a depurar programas PHP facilmente. Ele tem um design amigável e recursos avançados, como suporte CLI, depuração de chamadas AJAX e muito mais.

Ele pode encontrar e corrigir erros rapidamente, despejar variáveis, registrar erros, visualizar o consumo de memória e determinar o tempo de execução de consultas ou scripts. Usar codificação de cores e realçar problemas em vermelho com explicações claras ajuda a visualizar exceções e erros facilmente e entendê-los.

Tracy vem com funcionalidade de registro e autodetecção do ambiente. Ele armazena dados em arquivos de log e exibe mensagens de erro do servidor a um visitante durante os períodos de inatividade. Tracy também pode se integrar com Drupal 7, OpenCart, WordPress e muito mais.

vprof

vprof é um criador de perfil visual para aplicativos Python. Ele fornece visualizações ricas e interativas para as diferentes características do seu programa Python, como uso de memória e tempo de execução.

Ele está disponível sob uma licença BSD e oferece suporte a Python 3.4 e superior.

Conclusão

O desempenho do aplicativo é um fator crucial para atender às expectativas dos usuários finais. E se ocorrerem problemas de desempenho, você deve estar pronto para diagnosticar o problema antes de afetar a experiência do usuário final.

Portanto, continue otimizando seus aplicativos e corrija os problemas imediatamente para continuar oferecendo desempenho de aplicativo super rápido aos usuários usando as ferramentas que mencionei neste artigo.

Aqui está uma tabela de comparação rápida mostrando os criadores de perfil acima e para que eles são usados ​​principalmente.

Nome línguas
py-espião Pitão
Piroscópio Python, Ruby, Go
Bubbleprof Node.js
Pyinstrument Pitão
Xdebug PHP
SPX PHP
Prefixo Python, .NET, Java, Node.js, Ruby, PHP
Escaleno Pitão
VisualVM Java
Orbit Profiler C, C ++
Uber JVM Profiler Java
Tracy PHP
vprof Pitão