SoFunction
Updated on 2025-04-11

Go uses pprof for CPU, memory and blocking situation analysis

Go provides powerfulpprof(Performance Profiler)Tools for analysisCPU, memory, Goroutine blockingand other performance issues help developers optimize programs and improve operational efficiency.

This article will analyze in depthpprofThe core functions, usage methods, and provide practical cases to master Go performance analysis skills.

1. Introduction to pprof

pprofIt is a performance analysis tool built in Go runtime that can be used to detect:

  • CPU usage(Find out CPU-intensive code)
  • Memory allocation(Locate hotspot codes with high memory usage)
  • Goroutine blocking situation(Analyze lock contention, deadlock)
  • Heap memory leak(Analyze the heap allocation)

pprofrelynet/http/pprof, can access running programs through HTTP, collect and analyze performance data.

2. Get started quickly: enable pprof

Enable pprof in a web server

Add tonet/http/pprofTo expose the pprof HTTP interface:

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof" // Import pprof and automatically register routing)

func main() {
    go func() {
        (("localhost:6060", nil))
    }()

    select {} // Prevent the main coroutine from exiting}

After running the program, you can access it using the following commandpprofdata:

# Access CPU Profiling datacurl http://localhost:6060/debug/pprof/profile?seconds=30 > 

# Access memory Profiling datacurl http://localhost:6060/debug/pprof/heap > 

3. CPU Profiling: Analyze CPU Usage

CPU Profiling recorder program executionCPU usage of each function, help identify performance bottlenecks.

3.1 Code Example

package main

import (
    "log"
    "os"
    "runtime/pprof"
    "time"
)

func busyWork() {
    for i := 0; i < 1e7; i++ {
    }
}

func main() {
    f, err := ("")
    if err != nil {
        (err)
    }
    defer ()

    (f)
    defer ()

    busyWork() // Run CPU intensive tasks}

3.2 Analysis using go tool pprof

# Run CPU Profilinggo run 

# Use pprof to analyze CPU performancego tool pprof 

# Enter top in interactive mode to view the function with the highest CPU usage(pprof) top

topCommand displayThe function that takes up the most CPU time, help identify performance bottlenecks.

4. Memory Profiling: Analyze memory allocation

Heap Profiling is mainly used for detectionHigh memory footprint and memory leaks

4.1 Code Example

package main

import (
    "log"
    "os"
    "runtime/pprof"
)

func allocateMemory() {
    _ = make([]byte, 10<<20) // Allocate 10MB of memory}

func main() {
    f, err := ("")
    if err != nil {
        (err)
    }
    defer ()

    allocateMemory()
    (f) // Record heap memory information}

4.2 Analysis using go tool pprof

# Run the program and generatego run 

# Analyze memory usagego tool pprof 

# Enter top in interactive mode to view the function with the most memory usage(pprof) top

5. Blocking Profiling: Analyze Goroutine blocking situation

After Go 1.9,pprofProvidedBlocking Profiling, used to detect GoroutineLock competitionandCauses of blockage

5.1 Code Example

package main

import (
    "fmt"
    "sync"
    "time"
)

var mu 

func worker(id int) {
    ()
    defer ()
    ("Worker %d is working\n", id)
    ()
}

func main() {
    for i := 0; i < 5; i++ {
        go worker(i)
    }
    (3 * )
}

5.2 Analyze the blocking situation

# Run the program and access blocking analysis datacurl http://localhost:6060/debug/pprof/block &gt; 

# Use pprof tool to analyzego tool pprof 

(pprof) top

topCommand displayFunctions that cause Goroutine to block, help optimize lock competition issues.

6. Visualize pprof data

pprofGenerated.profFiles can be usedGraphical toolsPerform visual analysis.

6.1 Install graphviz

# Ubuntu
sudo apt-get install graphviz

# macOS
brew install graphviz

6.2 Generate SVG visual report

# Generate call diagrams in SVG formatpprof -svg  &gt; 

Then open it with a browser, view the call relationship.

7. Conclusion

Go pprofIt is a powerful performance analysis tool that can help developers analyze in depthCPU, memory, Goroutine blockingetc. masterpprof,you can:

  • Identify CPU performance bottlenecks and optimize compute-intensive tasks.
  • Analyze memory allocation, reduce GC burden, and optimize memory usage.
  • Detect Goroutine blocking, reduce lock competition, and improve concurrency performance.
  • Visualize program performance with visualization tools.

usepprof, can make Go programs run more efficiently and avoid potential performance problems!

This is the article about Go using pprof for CPU, memory and blocking analysis. For more relevant Go pprof performance analysis content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!