Melhore o desempenho de seus programas Go usando a técnica de criação de perfil.
A criação de perfil é uma técnica comumente usada no ciclo de desenvolvimento de software para analisar o desempenho de um programa, geralmente para uma comparação entre programas ou para identificar gargalos e áreas de melhoria para um programa. A criação de perfil envolve medir e analisar várias métricas, como uso de memória, utilização de CPU, tempo de execução e outras estatísticas no nível do sistema.
A criação de perfil visa identificar partes de um programa que consome mais recursos para que possa ser otimizado para melhor desempenho. A criação de perfil também pode ajudar na depuração, otimização do gerenciamento de memória e ajuste de simultaneidade.
Criação de perfil em Go
Existem muitas ferramentas para criar perfis em Go. Algumas ferramentas populares incluem a ferramenta de criação de perfil pprof integrada do Go e pacotes populares de terceiros, como os pacotes Go Tool Trace e Go-Torch.
O pprof pacote faz parte do
tempo de execução pacote. O pprof O pacote fornece funcionalidade para gravar dados de criação de perfil em tempo de execução em formatos que o pprof ferramenta de visualização pode interpretar.Veja como você pode importar o pprof pacote em seus programas Go:
importar"pprof"
Go fornece vários comandos e sinalizadores para trabalhar com o código-fonte. Execute o seguinte ferramenta comando para acessar os resultados de criação de perfil em vários formatos.
ir ferramenta pprof
O comando gera os detalhes de uso sobre o pprof comando.
Criação de perfil de CPU em Go
O perfil da CPU mede o tempo que um programa gasta durante a execução de funções. A criação de perfil de CPU é útil para identificar partes do código que consomem mais tempo de CPU.
O pprof O pacote fornece funções para coletar perfis de CPU, iniciar e interromper a criação de perfil de CPU e uma função para gravar dados de perfil em arquivos.
Veja como iniciar e parar um perfil de CPU e gravar os dados em um arquivo de criação de perfil:
importar (
"os"
"tempo de execução/pprof"
)funçãoprincipal() {
f, err := os. Criar("cpu_profile.prof")
se erro != nada {
pânico(errar)
}
adiar f. Fechar()erro = pprof. IniciarCPUProfile (f)
se erro != nada {
pânico(errar)
}
adiar pprof. StopCPUProfile()
// código a ser perfilado
}
O principal função cria um arquivo e fecha o fluxo de arquivo com um adiar declaração e o Fechar função da instância do arquivo. O StartCPUProfile A função inicia um perfil de CPU e grava os dados no arquivo, e o StopCPUProfile fecha o fluxo de perfil com um adiar declaração. Depois de iniciar e parar o perfil da CPU, você pode escrever o código que deseja analisar.
Aqui está o resultado da execução do pprof comando com o arquivo de perfil do programa:
Executando o pprof O comando com um arquivo inicia um shell interativo que permite explorar os dados de criação de perfil. Você pode usar comandos como principal e lista para visualizar as funções que levam mais tempo para serem executadas.
Perfil de memória em Go
O perfil de memória é uma técnica usada para identificar vazamentos de memória e uso caro de memória no código, medindo o uso de memória de funções no código.
Você pode iniciar um perfil de memória com o WriteHeapProfile função. O WriteHeapProfile A função pega a instância do arquivo e grava os dados do perfil no arquivo.
importar (
"os"
"tempo de execução/pprof"
)funçãoprincipal() {
f, err := os. Criar("mem_profile.prof")
se erro != nada {
pânico(errar)
}
adiar f. Fechar()erro = pprof. WriteHeapProfile (f)
se erro != nada {
pânico(errar)
}
// código a ser perfilado
}
O principal A função cria um arquivo de criação de perfil e o WriteHeapProfile A função usa a instância do arquivo como um argumento e retorna um tipo de erro de gravação após gravar no arquivo. você pode mais lidar com o erro de acordo com sua exigência.
Bloquear perfis com Go
O perfil de bloco mede o tempo de espera de um programa para primitivas de sincronização, como mutexes e canais. A criação de perfil de bloco é útil para identificar partes do código que podem causar bloqueio.
O Olho para cima A função retorna o perfil com o nome de uma string especificada e o Escrever para função do Olho para cima A função grava um instantâneo formatado em pprof do perfil no arquivo.
Veja como você pode implementar o perfil de bloco para seus programas Go:
importar (
"os"
"tempo de execução/pprof"
)funçãoprincipal() {
f, err := os. Criar("block_profile.prof")
se erro != nada {
pânico(errar)
}
adiar f. Fechar()erro = pprof. Olho para cima("bloquear").WriteTo (f, 0)
se erro != nada {
pânico(errar)
}
// código a ser perfilado
}
O programa cria um arquivo para armazenar os dados do perfil do bloco, procura os blocos com a Olho para cima e grava os dados do perfil do bloco no arquivo.
Traçar perfis com Go
Trace profiling é uma técnica para medir a execução de um programa, incluindo agendamento goroutine e chamadas de sistema. A criação de perfil de rastreamento é útil para identificar gargalos de desempenho e entender as interações entre diferentes partes do programa.
O vestígio O pacote fornece funções para criação de perfil de rastreamento. Este pacote também faz parte do tempo de execução pacote.
importar (
"os"
"tempo de execução/rastreamento"
)funçãoprincipal() {
f, err := os. Criar("traçar")
se erro != nada {
pânico(errar)
}
adiar f. Fechar()erro = rastreamento. Iniciar (f)
se erro != nada {
pânico(errar)
}
adiar vestígio. Parar()
// código a ser perfilado
}
O programa cria um arquivo de rastreamento para armazenar os dados de rastreamento, inicia o rastreador com o Começar função que recebe a instância do arquivo e retorna um tipo de erro e adia o rastreador com o Parar função.
Go também fornece ferramentas para formatar o código-fonte. Juntamente com as ferramentas de criação de perfil, você pode usar as ferramentas de formatação para manter os padrões de código. O gofmt tool é uma ferramenta de formatação integrada que você pode usar para formatar seu código-fonte Go com base em regras especificadas para seus pacotes.