ヒント:プロファイル


数ヶ月前に、我々は我々が信じていたものに関連した問題に気がつき始めました、そして、結局我々のnewrelic/AWS CloudWatchダッシュボードのために確実に確かめられて、メモリリークでしたBill Kennedy's Advanced Go Workshop そこで、彼は異なる方法を述べましたprofiling code , その時点では、プロファイルを可視化するためのWeb UIは本当に正式にリリースされませんでした.サイドノートで私は非常にあなたはビルのプレゼンテーションやワークショップのいずれかに参加することをお勧め、彼らは驚異的です!
Goのプロファイリングは、私が15年前の私の最初の仕事でCプログラムをプロファイリングしていたとき、昔の良い日を思い出させます.
Goのために、生態系に慣れるためのいくつかの大きな公式資源は、特にあります:

  • golang.org Diagnostics ,

  • Profiling Go Programs ,
  • Standard library: runtime/pprof
  • Standard library: net/http/pprof
  • しかし、おそらく行方不明のキーは pprof documentation 詳細が少し良く説明されているところではなく、本当に便利なオプションをcompare profiles 使用 -diff_base .
    HTTPプログラムにとって重要なビットは、net/http/pprof あなたのHTTP MUXで.例えば、gorilla.Mux 以下のようなことをするのは十分です.
    import "net/http/pprof"
    
    // ... some other relevant code here ...
    
    router.PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index)
    
    理想的には/debug/pprof/ 独自のソースコードを漏らすのを避けるために何らかのサービスの後ろにあります.