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: