Sobes.tech
Middle+

Quais são os métodos de identificação e diagnóstico de problemas de desempenho em produção?

sobes.tech IA

Resposta da IA

  • Monitorização de métricas:
    • Uso de pacotes integrados: expvar (métricas simples de chave-valor), runtime (estatísticas de GC, goroutines, etc.).
    • Bibliotecas de terceiros: Prometheus, Datadog, New Relic.
    • Acompanhamento de RPS, latências de pedidos, erros, consumo de recursos (CPU, RAM).
  • Perfilamento:
    • Uso do pacote net/http/pprof para serviços HTTP.
    • Uso do pacote runtime/pprof para gerar perfis de CPU, memória, bloqueios, goroutines.
    • Análise de perfis com a ferramenta go tool pprof.
    # Exemplo de uso do go tool pprof
    go tool pprof http://localhost:6060/debug/pprof/heap  # Perfil de heap
    
    • Tipos de perfilamento: CPU, Heap, Goroutine, Blocking, Mutex, ThreadCreate, Trace.
  • Traçado:
    • Uso do pacote golang.org/x/net/trace.
    • Uso do OpenTracing/OpenTelemetry para tracing distribuído.
    • Acompanhamento do caminho da requisição através do sistema, identificação de gargalos na interação de serviços.
    // Exemplo de uso de trace
    import "golang.org/x/net/trace"
    
    func handleRequest(w http.ResponseWriter, r *http.Request) {
        tr := trace.New("meu_servico", "handleRequest")
        defer tr.Finish()
    
        // Registro de eventos na trace
        tr.LazyLog("Início do processamento da requisição", false)
    
        // ... lógica de processamento da requisição ...
    
        tr.LazyLog("Fim do processamento da requisição", false)
    }
    
  • Análise de logs:
    • Coleta e armazenamento centralizado de logs (ELK Stack, Loki/Grafana).
    • Busca por anomalias, erros, requisições lentas nos logs.
    • Integração de logs com tracing para vincular eventos.
  • Uso de soluções APM especializadas:
    • Dynatrace, AppDynamics, New Relic.
    • Oferecem ferramentas abrangentes para monitoramento, perfilamento e tracing.
  • Comparação de monitoramento, perfilamento e tracing:
Ferramenta Propósito Nível de detalhe Overhead
Monitoramento Estado geral do sistema, tendências Baixo Baixo
Perfilamento Identificação de pontos quentes (funções, alocações) Alto Médio
Tracing Caminho da requisição, interação de componentes Médio Médio/Alto
  • Realizar testes de carga antes do deploy em produção.
  • Uso do Go Dog (plugin para go test) para benchmarking ao nível de funções/métodos.
  • Coleta e análise de dumps de memória (Heap Dumps) para identificar vazamentos de memória ou consumo excessivo.