go常用命令

MX007發表於2020-09-11

go help

  • test
  • testflag

    build選項

  • -gcflags “-N -l” 是為了關閉編譯器最佳化和函式內聯,防止後面在設定斷點的時候找不到相對應的程式碼位置
  • –gcflags=-m 記憶體逃逸分析

GODEBUG環境變數

GODEBUG=gctrace=1 go run cmd/agent_bin.go
- 設定 `schedtrace=X` 引數可以使執行時在每 X 毫秒發出一行排程器的摘要資訊到標準 err 輸出中
- `scheddetail=1` 可以使執行時在每 X 毫秒發出一次詳細的多行資訊,資訊內容主要包括排程程式、處理器、OS 執行緒 和 Goroutine 的狀態。

go tool

pprof

  • display

    • 命令列方式 go tool pprof xx.out
    • web方式 go tool pprof -http=:8080 heap.out
  • 生成檔案

    • 程式碼生成

      // cpu
      pprof.StartCPUProfile(w)
      defer pprof.StopCPUProfile()
      // mem
      pprof.WriteHeapProfile(w)
      
    • curl從http獲取 localhost:6061/debug/pprof/profile?...

    • 效能測試 go test -bench=. -cpuprofile=./cpu.prifile

  • 分析

    • go tool pprof x.prof
      • top
      • list func
      • web
    • go-torch x.prof | go-torch -u http=localhost:6061 -t30

trace

  • 獲取trace檔案
    • 寫程式碼
        trace.Start(w)
        defer trace.Stop()
    • http請求 /debug/pprof/trace
  • 分析
    • go tool trace /tmp/trace.output

objdump反彙編

  • go tool objdump -S -s “main.example” ./example1

test

效能測試

  • GOGC=off go test -cpu 1 -run none -bench . -benchtime 3s
  • GOGC=off go test -cpu 8 -run none -bench . -benchtime 3s

壓力測試

  • go-wrk
本作品採用《CC 協議》,轉載必須註明作者和本文連結