β

Go应用性能分析

HP'S Memory 106 阅读
 
程序性能分析是一个非常庞大的话题,自下而上涉及底层CPU、网络、I/O,上层的业务逻辑复杂度、算法性能等。同时性能分析也是容易被大家忽略的点,往往线上出现问题、服务超时才会着手排查。工欲善其事,必先利其器,本文介绍两种Golang性能分析工具:pprof和torch。

1、pprof
pprof是Golang官方自带的程序性能分析包,可以在 net/http/pprof runtime/pprof 这两个地方引用, net/http/pprof 实际也调用了 runtime/pprof ,并在http端口上暴露。
(1)服务程序
引入方式如下:

import _ "net/http/pprof"

demo代码如下

package main
import "net/http"
import _ "net/http/pprof"
func main() {
    http.ListenAndServe(":8080", http.DefaultServeMux)
}

然后访问该链接 http://127.0.0.1 :8080/debug/pprof/
可以看到当前web服务的状态,包括CPU占用情况和内存使用情况

(2)应用程序
这种场景下需要引入 runtime/pprof 包,对CPU运行信息进行采样存储,比如

package main
import "runtime/pprof"
import "os"
import "log"
func main() {
    f, err := os.Create("cpu.prof")
    if err != nil {
        log.Fatal(err)
    }
    pprof.StartCPUProfile(f)
    defer pprof.StopCPUProfile()
}

下一步需要使用pprof文件做出性能分析图

go tool pprof test.exe cpu.prof

然后输入 web 命令生成svg文件,svg用浏览器打开可以看到调用链。如果提示"profile is empty"是由于程序使用了很少的内存,无法进行采样导致,可以修改 runtime.MemProfileRate 降低采样率,运行前加上环境变量 GODEBUG="memprofilerate=1"

[...]

 
作者:HP'S Memory
  Talk is cheap, show me the code.
原文地址:Go应用性能分析, 感谢原作者分享。

发表评论