process-exporter代码里已默认使用了pprof,直接可以通过url访问
http://10.1.17.171:9256/debug/pprof/
不管是前文哪种方式获取,都可以进行分析。这里http的方式把可以看到的信息全部都列出来了。
类型 描述
allocs 内存分配情况的采样信息
blocks 阻塞操作情况的采样信息
cmdline 显示程序启动命令参数及其参数
goroutine 显示当前所有协程的堆栈信息
heap 堆上的内存分配情况的采样信息
mutex 锁竞争情况的采样信息
profile cpu占用情况的采样信息,点击会下载文件
threadcreate 系统线程创建情况的采样信息
trace 程序运行跟踪信息
通过加粗的关键字,很直观可以看到能分析到的数据。
什么是 Profile?
在计算机性能调试领域里,profile 就是对应用的画像,这里画像就是应用使用 CPU 和内存等情况,也就是说应用使用了多少 CPU 资源、都是哪些部分在使用、每个函数使用的比例是多少、有哪些函数在等待 CPU 资源等等。知道了这些,我们就能对应用进行规划,也能快速定位性能瓶颈。
Golang 是一个对性能特别看重的语言,因此语言中自带了 profile 的库,这篇文章就要讲解怎么在 golang 中做 profile。
在 Golang 中,主要关注的应用运行情况主要包括以下几种:
CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据
Memory profile(Heap profile):报告程序的内存使用情况
Block profile:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈
Goroutine profile:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的
点击profile可以页面直接下载文件,但是不能直接分析
可视化
pprof 能以各种样式输出数据,比如 svg、gv、callgrind、png、gif 等等。其中一个非常便利的方法是在交互式终端中输入 web 命令,就能自动生成一个 svg 文件,并跳转到浏览器打开,生成了一个函数调用图:
yum -y install graphviz
go tool pprof 最简单的使用方式为 go tool pprof [binary] [source],binary 是应用的二进制文件,用来解析各种符号;source 表示 profile 数据的来源,可以是本地文件,也可以是 http 地址。比如:
go tool pprof -http=“10.1.17.171:8081” /home/process-exporter http://10.1.17.171:9256/debug/pprof/profile