如何傾印 Envoy 的堆積記憶體配置檔?

如果使用的 Envoy 二進位檔是使用 gperftools 建置的,請查看 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