Go 调试

Go的pprof使用

  • web服务器

      import _"net/http/pprof"
    
      go func() {
        log.Println(http.ListenAndServe("localhost:6666", nil))
      }()
    
  • 应用程序

      import "runtime/pprof"
      
      func main() {
      ...
      f, err := os.Create("cpu.prof")
      if err != nil {
          log.Fatal(err)
      }
      defer f.close()
      pprof.StartCPUProfile(f)
      defer pprof.StopCPUProfile()
    

go tool pprof XXX cpu.prof

为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息

go tool pprof http://localhost:6666/debug/pprof/profile

使用go tool pprof分析内存泄漏、CPU消耗

fm, err := os.Create("mem.prof")
if err != nil {
    log.Fatal(err)
}
pprof.WriteHeapProfile(fm)
fm.Close()

13.10 性能调试:分析并优化 Go 程序

在Go语言里检测内存泄漏

func saveHeapProfile() {
  runtime.GC()
  f, err := os.Create(fmt.Sprintf("prof/heap_%s_%d_%s.prof", progname, pid, time.Now().Format("2006_01_02_03_04_05")))
  if err != nil {
    return
  }
  defer f.Close()
  pprof.Lookup("heap").WriteTo(f, 1)
}

保存堆信息之前先GC了一下,以进行垃圾回收,之后保存下来的堆信息将更精确地告诉我们哪些地方可能会造成内存泄露,无法被垃圾回收的。

[golang]内存不断增长bytes.makeSlice

Golang使用pprof监控性能及GC调优

go profiling相关

提及 pkg/profile 包

Debugging performance issues in Go programs

Golang Slices And The Case Of The Missing Memory

golang profiling -- Yandong Yao

graphviz

官网:
http://www.graphviz.org/Download..php
SuSE:
http://download.opensuse.org/repositories/graphics/SLE_12/x86_64/graphviz-2.38.0-137.1.x86_64.rpm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容