Conceitos da criação de perfil

A criação de perfil é uma análise de códigos dinâmica. Você captura as características do aplicativo enquanto ele é executado e usa essas informações para saber como tornar seu aplicativo mais rápido e eficiente.

Antes, a criação de perfil era realizada apenas durante o desenvolvimento do aplicativo. Essa abordagem dependia da capacidade de desenvolver testes de carga e comparativos de mercado que pudessem prever com precisão um ambiente de produção.

A criação contínua de perfil refere-se à criação de perfil do aplicativo enquanto ele é executado em um ambiente de produção. Essa abordagem reduz a necessidade de desenvolver testes de carga preditivos precisos e comparativos de mercado para o ambiente de produção. A pesquisa sobre criação de perfil contínua mostrou que ela é precisa e econômica*.

O Cloud Profiler é uma ferramenta de criação de perfil contínua projetada para aplicativos em execução no Google Cloud:

  • É um criador de perfil estatístico ou de amostragem que tem sobrecarga baixa e é adequado para ambientes de produção.

  • Ele é compatível com linguagens comuns e coleta vários tipos de perfil. Veja Tipos de criação de perfil disponíveis para ter uma visão geral.

Configurar um aplicativo do Google Cloud para gerar dados de perfil é um processo simples e único: vincule ou execute seu serviço com um agente de criação de perfil incluído. Depois que o aplicativo for implantado, o agente de criação de perfil será executado periodicamente para coletar dados de desempenho e depois enviar esses dados para o projeto do Google Cloud. Veja detalhes sobre esse processo em Coleta de perfis.

Depois de coletar dados de perfil para seu aplicativo, você pode analisá-los usando a interface do Profiler. A análise de dados de perfil normalmente é um processo iterativo que depende do seu conhecimento do design do aplicativo e da linguagem de programação dele.

*Veja Criação de perfil em todo o Google: uma infraestrutura de criação de perfil contínua para data centers e Criação contínua de perfis: aonde foram todos os ciclos?.

Tipos de criação de perfil disponíveis

A tabela a seguir resume os tipos de perfil compatíveis:

Tipo de perfil Go Java Node.js Python
Tempo de CPU SS S
Heap SS S
Heap alocada S
Contenção S
Linhas de execução S
Tempo decorrido S SS

O restante desta seção fornece mais detalhes sobre cada um desses tipos de perfil.

Medição de tempo

  • Tempo de CPU é o tempo que a CPU gasta executando um bloco de código.

    O tempo de CPU de uma função informa quanto tempo a CPU ficou ocupada executando as instruções. Ele não inclui o tempo que a CPU passou esperando ou processando instruções para outra coisa.

  • Tempo decorrido é o tempo que leva para executar um bloco de código.

    O tempo decorrido de uma função mede o tempo que passou entre a entrada e a saída de uma função. O tempo decorrido inclui todo o tempo de espera, incluindo os de bloqueio e sincronização de linhas de execução. O tempo decorrido de um bloco de código nunca pode ser menor que o da CPU.

Se o tempo decorrido for maior que o tempo de CPU, isso indica que o código passa um tempo aguardando. Quando a diferença é substancial, o aplicativo pode ter um gargalo de recursos.

Se o tempo de CPU estiver próximo do tempo decorrido, isso indica que o código consome muita CPU, isto é, quase todo o tempo necessário para a execução é gasto pela CPU. Os blocos de código com uso intensivo de CPU de longa duração podem ser candidatos à otimização.

Uso de heap (memória)

  • O uso de heap (também chamado de heap) é a quantidade de memória alocada no heap do programa no momento em que o perfil é coletado. Ao contrário de outros tipos de perfil em que os dados são coletados em um intervalo, esse tipo de perfil coleta o uso do heap em um único ponto no tempo.

  • Alocação de heap (também chamada de heap alocada) é a quantidade total de memória que foi alocada no heap do programa durante o intervalo em que o perfil foi coletado. para criar um anexo da VLAN de monitoramento. Esse valor inclui qualquer memória alocada e que foi liberada e não esteja mais em uso. Por exemplo, considere um job que repete a seguinte sequência: aloca 1 MiB, aguarda 500 ms, libera 1 MiB e aguarda 500 ms. Nos 10 segundos em que o perfil de heap alocado é coletado, há 10 alocações e 10 gratuitas. Este perfil mostraria um heap alocado de 10 MiB, porque os livres não são considerados. A taxa média de alocação é de 10 MiB/10 segundos ou 1 MiB por segundo.

Ao criar o perfil do uso de heap, você encontra possíveis ineficiências e vazamentos de memória nos programas. Com o perfil das alocações, é possível saber quais delas estão gerando mais trabalho para o coletor de lixo.

Informações sobre linhas de execução

Aplicativos que criam linhas de execução podem apresentar linhas de execução bloqueadas e vazamentos:

  • As linhas de execução bloqueadas são aquelas criadas, mas aguardando um bloqueio. Essas linhas de execução não estão em execução e talvez nunca sejam executadas. No entanto, uma linha de execução bloqueada pode acabar sendo executada.
  • Os vazamentos ocorrem quando o número de linhas de execução criadas continua aumentando.

Linhas de execução bloqueadas são um dos motivos de linhas de execução com vazamentos.

No nível do frame, o perfil Thread exibe o número médio de threads que incluem esse frame. Esse tipo de perfil coleta o uso do thread em um único momento.

Contenção

Em um programa de várias linhas de execução, o tempo gasto na espera para serializar o acesso a um recurso compartilhado pode ser grande. Entender o comportamento da contenção orienta o design do código e fornece informações para fazer ajustes no desempenho.

Coleta de perfis

O papel do agente de criação de perfil é capturar dados de perfil do aplicativo e transmitir esses dados para o back-end do Profiler usando a API Profiler. Cada perfil é para uma única instância de um aplicativo e inclui quatro campos que identificam exclusivamente sua implantação:

  • Projeto do Google Cloud
  • Nome do app
  • Zona do aplicativo
  • Versão do aplicativo

Quando um agente está pronto para capturar um perfil, ele emite um comando da API Profiler para o back-end do Profiler. O back-end recebe essa solicitação e, no cenário mais simples, responde imediatamente ao agente. A resposta especifica o tipo de perfil a ser capturado. Em resposta, o agente captura o perfil e o transmite para o back-end. Por fim, o back-end do Profiler associa o perfil ao seu projeto do Google Cloud. É possível visualizá-lo e analisá-lo usando a interface do Criador de perfil.

A sequência real de handshake é mais complexa do que a descrita no parágrafo anterior. Por exemplo, quando o Criador de perfil recebe uma solicitação de um agente, o back-end verifica o banco de dados para determinar se ele recebeu solicitações anteriores do agente. Caso contrário, o back-end adicionará as informações do agente ao banco de dados. Uma nova implantação será criada se os campos de implantação do agente não corresponderem aos de qualquer outro agente registrado.

A cada minuto, em média, e para cada implantação e cada tipo de perfil, o back-end seleciona um agente e o instrui a capturar um perfil. Por exemplo, se os agentes de uma implantação forem compatíveis com a criação de perfil de tempo decorrido e de heap, em média, dois perfis serão capturados por minuto:

  • Para todos os tipos de perfil, exceto uso de heap e threads, um único perfil representa os dados coletados por 10 segundos.

  • O uso de heap e os perfis de linha de execução são coletados instantaneamente.

Depois que o agente notifica o back-end do Criador de perfil que está pronto para capturar dados, ele fica inativo até o back-end responder com o tipo de perfil para captura. Se você tiver 10 instâncias de um aplicativo em execução na mesma implantação, crie 10 agentes de criação de perfil. No entanto, na maioria das vezes, esses agentes ficam inativos. Em um período de 10 minutos, são esperados 10 perfis. Cada agente recebe uma resposta para cada tipo de perfil, em média. Há uma ordem aleatória envolvida, então o número real pode variar.

O back-end do Profiler usa as cotas da API Profiler e os campos de implantação do perfil para limitar os perfis processados. Saiba mais sobre como visualizar e gerenciar suas cotas do Profiler em Cotas e limites.