google/pprof
GitHub: google/pprof
pprof 是一款用于可视化与分析程序性能采样数据的工具,帮助开发者高效定位 CPU、内存等性能瓶颈。
Stars: 9245 | Forks: 666
[](https://github.com/google/pprof/actions)
[](https://codecov.io/gh/google/pprof)
[](https://pkg.go.dev/github.com/google/pprof/profile)
# 简介
pprof 是一个用于可视化和分析 profiling 数据的工具。
profile.proto 是一个 protocol buffer,描述了一组调用栈
和符号化信息。常见的用途是表示
从统计 profiling 中采样的一组调用栈。该格式
在 [proto/profile.proto](./proto/profile.proto) 文件中进行了描述。有关 protocol
buffer 的详细信息,请参见 https://developers.google.com/protocol-buffers
Profiles 可以从本地文件或通过 http 读取。相同类型的多个
profiles 可以被聚合或比较。
如果 profile 采样包含机器地址,pprof 可以通过
使用原生的 binutils 工具(addr2line 和 nm)对它们进行符号化。
**这不是一款官方的 Google 产品。**
# 构建 pprof
前置条件:
- [受支持版本](https://golang.org/doc/devel/release.html#policy)的 Go 开发工具包。
遵循[这些说明](http://golang.org/doc/code.html)来准备
环境。
- Graphviz:http://www.graphviz.org/
可选,用于生成 profiles 的图形可视化
构建并安装它:
```
go install github.com/google/pprof@latest
```
该二进制文件将被安装到 `$GOPATH/bin`(默认为 `$HOME/go/bin`)。
# 基本用法
pprof 可以从文件读取 profile,或直接通过 http 从服务器读取。
在命令行中指定 profile 输入,并使用选项来
指示如何格式化报告。
## 生成按热度排序的 profile 文本报告:
```
% pprof -top [main_binary] profile.pb.gz
Where
main_binary: Local path to the main program binary, to enable symbolization
profile.pb.gz: Local path to the profile in a compressed protobuf, or
URL to the http service that serves a profile.
```
## 在 SVG 文件中生成图形,并使用 Web 浏览器打开它:
```
pprof -web [main_binary] profile.pb.gz
```
## 以交互模式运行 pprof:
如果未指定输出格式化选项,pprof 将以交互模式运行,
在此模式下,它会读取 profile 并接受用于可视化和
优化 profile 的交互式命令。
```
pprof [main_binary] profile.pb.gz
This will open a simple shell that takes pprof commands to generate reports.
Type 'help' for available commands/options.
```
## 通过 Web 界面运行 pprof
如果指定了 `-http` 标志,pprof 将在
指定的 host:port 上启动一个 Web 服务器,提供基于 Web 的 pprof 交互式界面。
host 是可选的,默认为 "localhost"。port 是可选的,默认为
一个随机的可用端口。`-http=":"` 将在本地
一个随机端口启动服务器。
```
pprof -http=[host]:[port] [main_binary] profile.pb.gz
```
上述命令应自动在
正确的页面打开您的 Web 浏览器;如果没有,您可以在
您的 Web 浏览器中手动访问指定的端口。
## 将 pprof 与 Linux Perf 结合使用
pprof 可以通过使用来自
[perf_data_converter](https://github.com/google/perf_data_converter) 包的
`perf_to_profile` 程序,读取由
[Linux perf](https://perf.wiki.kernel.org/index.php/Main_Page) 工具生成的 `perf.data` 文件。
## 在 Windows 上查看反汇编
要查看从编译为 Windows 可执行文件的 Go 程序中收集的 profiles 的反汇编,
该可执行文件必须使用 `go build -buildmode=exe` 构建。必须安装 LLVM 或 GCC,
以便 `pprof` 可以使用 `addr2line` 和 `nm` 等所需工具。
## 更多文档
有关更详细的最终用户文档,请参见 [doc/README.md](doc/README.md)。
有关 profile.proto 格式的说明,请参见 [proto/README.md](proto/README.md)。
标签:EVTX分析, Go, Graphviz, Mutation, Ruby工具, SOC Prime, 可视化, 开发工具, 性能分析, 性能调优, 日志审计