Как постоянно профилировать мое приложение go? - PullRequest
1 голос
/ 30 июня 2019

У моего приложения есть некоторые утечки памяти, которые часто вызывают сбой приложения. Поэтому я начал профилировать свое приложение с помощью pprof, но я могу получить профиль только в том случае, если я нажал на ссылку. Есть ли какие-то способы найти профиль через определенные промежутки времени, чтобы я мог проанализировать, что происходит с приложением?

1 Ответ

2 голосов
/ 30 июня 2019

Я надеялся, что при исключении (например, дамп ядра) будет полезный флаг для pprof dump, но я не смог ничего найти.В ожидании этого на ум приходят два варианта:

  • Внешний: регулярно свернуть pprof с использованием cron или другого драйвера
  • Внутренний: регулярно писать pprof изнутри программы

Внешний

$ curl http://localhost:8080/debug/pprof/heap > heap.0.pprof

Внутренний

ticker := time.NewTicker(1 * time.Hour)
go func() {
    for {
       select {
        case <- ticker.C:
if err := pprof.WriteHeapProfile(f); err != nil {
            log.Fatal("could not write memory profile: ", err)
        }

       }
    }
}()

Внешний завиток - это стратегия Iчасто берут, чтобы регулярно получать профили кучи, чтобы отслеживать / сравнивать рост памяти .

...