- 使用
runtime
包:
- 监控内存:
runtime.MemStats
结构体可以获取内存统计信息。例如:
package main
import (
"fmt"
"runtime"
)
func main() {
var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc = %v MiB", ms.Alloc/1024.0/1024.0)
}
- 监控CPU:
runtime.CPUProfile
函数可以用于收集CPU使用情况的概要信息。不过,这需要配合pprof
工具进行分析。
- 使用
pprof
包:
- CPU性能分析:
- 引入
net/http
和net/http/pprof
包,启动一个HTTP服务器来暴露pprof
相关的端点。例如:
package main
import (
"log"
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
// 这里是生成器函数的逻辑
//...
}
- 然后可以使用`go tool pprof`命令来分析性能数据,如`go tool pprof http://localhost:6060/debug/pprof/profile`,它会生成CPU使用情况的火焰图等分析结果。
- 内存性能分析:
- 同样通过上述HTTP服务器暴露的端点获取内存概要信息,如
http://localhost:6060/debug/pprof/heap
。然后使用go tool pprof
命令,如go tool pprof http://localhost:6060/debug/pprof/heap
,可以分析内存使用情况,比如找出内存分配最多的函数等。