分析 AlloyDB Omni Kubernetes 運算子的記憶體堆積使用量

選取說明文件版本:

本文說明如何取得 AlloyDB Omni 運算子記憶體堆積的快照,以診斷及偵錯潛在的記憶體問題。請按照下列步驟取得記憶體堆積,以供分析:

  1. 決定要分析哪個 AlloyDB Omni 運算子部署作業。AlloyDB Omni 運算子包含兩項部署作業,您可以分析其中一項的記憶體堆積。如要找出這兩個部署作業,請執行下列指令:

    kubectl get deployment -n alloydb-omni-system

    輸出結果會顯示 alloydb-omni-system 命名空間中的兩個部署項目:

    • fleet-controller-manager
    • local-controller-manager

    您可以取得任一部署項目的記憶體堆積。為示範起見,這些步驟說明如何取得 local-controller-manager 部署作業的記憶體堆積。

  2. 指定要使用的可用通訊埠,即可開啟記憶體分析功能。指定通訊埠後,Pod 會重新啟動。如要指定可用通訊埠,請在部署作業中使用 pprof-address 引數:

    1. 執行下列指令,在文字編輯器中開啟部署作業:

      kubectl edit -n alloydb-omni-system deploy local-controller-manager
    2. 在範本的 container 區段中,於 args 指定通訊埠:spec

      apiVersion: apps/v1
      kind: Deployment
      spec:
        ...
        template:
        ...
          spec:
            containers:
            - args
              - --pprof-address=:PORT
      
    3. 儲存部署檔案。儲存部署檔案後,Pod 會重新啟動。

  3. 等待 Pod 重新啟動,再繼續下一個步驟。

    如要確認 Pod 已重新啟動,請執行下列指令:

    kubectl get pod -n alloydb-omni-system

    確認 Pod 的 STATUS 欄輸出值為 Running,且 AGE 欄輸出值為短時間。舉例來說,如果 STATUS 資料欄為 Running,且 AGE 資料欄中的值為 50s,則表示 Pod 在重新啟動後已執行 50 秒。

  4. 使用下列指令開啟連接埠轉送:

    kubectl port-forward -n alloydb-omni-system DEPLOYMENT_POD_NAME PORT:PORT

    DEPLOYMENT_POD_NAME 替換為部署名稱,該名稱會顯示在下列指令輸出內容的 NAME 欄中:

    kubectl get pod -n alloydb-omni-system
  5. 在另一個終端機中執行下列指令,建立含有部署項目記憶體堆積快照的檔案:

    curl http://localhost:PORT/debug/pprof/heap > heap.out
  6. 儲存 heap.out 檔案,並用來查看您選擇分析的 AlloyDB Omni 運算子部署作業記憶體堆積。

  7. 如要關閉記憶體分析,請移除您在部署作業中使用的 pprof-address 引數和通訊埠:

    1. 在文字編輯器中開啟部署作業:

      kubectl edit -n alloydb-omni-system deploy local-controller-manager
    2. 從您先前新增的範本 spec 中,移除 container 區段 args 的「port」--pprof-address=:PORT 行。

後續步驟