Trace, ein leistungsstarkes Tool zur Go-Planung und Leistungsanalyse

Beispiel für die Trace-Nutzung


import (
	"fmt"
	"log"
	"os"
	"runtime/trace"
	"sync"
)

func main() {
	//runtime.GOMAXPROCS(1)
	// 1. 创建trace持久化的文件句柄
	f, err := os.Create("trace.out")
	if err != nil {
		log.Fatalf("failed to create trace output file: %v", err)
	}
	defer func() {
		if err := f.Close(); err != nil {
			log.Fatalf("failed to close trace file: %v", err)
		}
	}()

	// 2. trace绑定文件句柄
	if err := trace.Start(f); err != nil {
		log.Fatalf("failed to start trace: %v", err)
	}
	defer trace.Stop()

	var wg sync.WaitGroup
	wg.Add(2)

	go func() {
		fmt.Println(`Hello`)
		wg.Done()
	}()

	go func() {
		fmt.Println(`World`)
		wg.Done()
	}()

	wg.Wait()
}

Das Terminal führt zunächst go run main.go aus

Führen Sie dann das Go-Tool Trace Trace.out aus und das Programm öffnet eine Seite mit dem Standardbrowser

 

  • Trace anzeigen: Sehen Sie sich den Trace an. Sie können diese Ausführung sehen, wie viele P (Prozessoren) gestartet sind und auf welchem ​​P die Coroutine ausgeführt wird. Helfen Sie beim Verständnis des Planungsmodells GMP
  • Goroutine-Analyse: Bei der Goroutine-Analyse können Sie die Gesamtzahl der Coroutinen und spezifische Coroutine-Ausführungen anzeigen
  • Netzwerkblockierungsprofil: Netzwerkblockierungsprofil
  • Synchronisationsblockierungsprofil: Synchronisationsblockierungsprofil
  • Syscall-Blockierungsprofil: Systemanruf-Blockierungsprofil. Sie können sehen, welcher Teil des Programms Zeit benötigt.
  • Planer-Latenzprofil: Planen des Latenzprofils
  • Benutzerdefinierte Aufgaben: Benutzerdefinierte Aufgaben
  • Benutzerdefinierte Regionen: Benutzerdefinierte Regionen
  • Minimale Mutatorauslastung: Minimale Mutatorauslastung


Referenzlinks:

Go's Leistungsanalyse-Tool-Trace – Jianshu
 

Supongo que te gusta

Origin blog.csdn.net/xia_2017/article/details/128468544
Recomendado
Clasificación