1. 程式人生 > 其它 >Linkerd 2.10(Step by Step)—控制平面除錯端點

Linkerd 2.10(Step by Step)—控制平面除錯端點

Linkerd 2.10 系列

Linkerd 2.10 中文手冊持續修正更新中:

所有控制平面元件(Grafana 除外)
都使用 Go 的 pprof
通過路徑 /debug/pprof 暴露執行時分析資訊。

您可以使用 go tool pprof 使用提供的資料以生成多種格式(PDF、DOT、PNG 等)的輸出。

提供了以下診斷(/debug/pprof 提供了帶連結的摘要):

  • allocs: 過去所有記憶體分配的樣本
  • block: 導致同步原語阻塞的堆疊跟蹤
  • cmdline: 當前程式的命令列呼叫
  • goroutine: 所有當前 goroutine 的堆疊跟蹤
  • heap: 活動物件的記憶體分配示例。您可以指定 gc GET 引數以在獲取堆樣本之前執行 GC
  • mutex: 競爭互斥鎖持有者的堆疊跟蹤
  • profile: CPU 配置檔案。您可以在 seconds GET 引數中指定持續時間。
    獲取配置檔案後,使用 go tool pprof 命令調查配置檔案。
  • threadcreate: 導致建立新 OS 執行緒的堆疊跟蹤
  • trace: 當前程式的執行軌跡。您可以在 seconds GET 引數中指定持續時間。
    獲取跟蹤檔案後,使用 go tool trace 命令調查跟蹤。

示例用法

此資料通過 admin-http 埠提供。要找到此埠,
您可以檢查 pod 的 yaml,或者對 identity pod,發出如下命令:

kubectl -n linkerd get po \
    $(kubectl -n linkerd get pod -l linkerd.io/control-plane-component=identity \
        -o jsonpath='{.items[0].metadata.name}') \
    -o=jsonpath='{.spec.containers[*].ports[?(@.name=="admin-http")].containerPort}'

然後使用 kubectl port-forward 命令從叢集外部訪問該埠(在本例中,埠為 9990):

kubectl -n linkerd port-forward \
    $(kubectl -n linkerd get pod -l linkerd.io/control-plane-component=identity \
        -o jsonpath='{.items[0].metadata.name}') \
    9990

現在可以使用 go tool 來檢查這些資料。
例如,在 PDF 檔案中生成描述記憶體分配的圖表:

go tool pprof -seconds 5 -pdf http://localhost:9990/debug/pprof/allocs
我是為少
微信:uuhells123
公眾號:黑客下午茶
加我微信(互相學習交流),關注公眾號(獲取更多學習資料~)