如何转储 Envoy 的堆配置文件?

如果使用使用 gperftools 构建的 Envoy 二进制文件,请查看 PPROF.md 以了解如何生成 Envoy 堆配置文件。

对于任何使用普通的 tcmalloc 构建的 Envoy 二进制文件,/heap_dump 端点支持转储 Envoy 的当前堆配置文件。

使用以下 Envoy 进程作为特定示例

$ /path/to/envoy -c /path/to/config.yaml --concurrency 2

您可以通过以下命令获取 Envoy 的堆配置文件

$ curl <Envoy IP>:<Envoy Admin Port>/heap_dump -o /heap/output/envoy.heap

然后您可以使用 pprof 分析输出的堆配置文件

$ pprof -http localhost:9999 /heap/output/envoy.heap

注意

如果您在生产环境中转储堆配置文件并在本地环境中分析它,请确保您的本地环境中有一个 Envoy 二进制文件,并且本地二进制文件与生产环境中的二进制文件具有相同的路径。并且请确保用于分析堆配置文件的 Envoy 二进制文件是带有函数符号的二进制文件(未剥离的二进制文件)。

您还可以从两个不同的堆配置文件中获取堆差异

$ pprof -http:localhost:9999 /heap/output/envoy_1.heap
$ sleep 30
$ pprof -http:localhost:9999 /heap/output/envoy_2.heap
$ pprof -http:localhost:9999 -base /heap/output/envoy_1.heap /heap/output/envoy_2.heap