👻

性能调优

使用方式 1

import ( "github.com/sohaha/zlsgo/znet" "github.com/sohaha/zlsgo/zpprof" ) func main(){ r := znet.New("Go") // 注册pprof路由,如果 token 设置为空表示不需要验证 token zpprof.Register(r, "mytoken") znet.Run() } // 启动服务后直接访问 http://127.0.0.1:3788/debug?token=mytoken

使用方式 2

// 使用另外端口(原始版本) go zpprof.ListenAndServe("0.0.0.0:8082") // 启动服务后直接访问 http://127.0.0.1:8082/debug/pprof/

通过 Web 界面分析

查看当前总览:访问 http://127.0.0.1:3788/debug/pprof/ (如设置了token自行填上)
/debug/pprof/ profiles: 0 block 5 goroutine 3 heap 0 mutex 9 threadcreate full goroutine stack dump
这个页面中有许多子页面。
  • cpu(CPU Profiling): /debug/pprof/profile,默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件
  • block(Block Profiling):/debug/pprof/block,查看导致阻塞同步的堆栈跟踪
  • goroutine:/debug/pprof/goroutine,查看当前所有运行的 goroutines 堆栈跟踪
  • heap(Memory Profiling): /debug/pprof/heap,查看活动对象的内存分配情况
  • mutex(Mutex Profiling):/debug/pprof/mutex,查看导致互斥锁的竞争持有者的堆栈跟踪
  • threadcreate:/debug/pprof/threadcreate,查看创建新OS线程的堆栈跟踪

通过交互式终端分析

终端执行 go tool pprof http://127.0.0.1:3788/debug/pprof/profile?seconds=60
执行该命令后,需等待 60 秒(可调整 seconds 的值),pprof 会进行 CPU Profiling。
结束后将默认进入 pprof 的交互式命令模式,可以对分析的结果进行查看或导出。
具体可执行 pprof help 查看命令说明

可视化界面

终端执行 go tool pprof -http=:8080 http://127.0.0.1:3788/debug/pprof/profile?seconds=60