全部產品
Search
文件中心

Elastic Container Instance:使用coredump分析執行個體程式異常

更新時間:Jul 06, 2024

coredump是指在程式運行過程中發生異常終止或崩潰時,作業系統將程式的記憶體內容轉儲到一個特殊的檔案中,以便於後續的調試和分析。本文介紹如何為ECI Pod(即ECI執行個體)開啟coredump,以便在容器異常終止時可以查看分析coredump產生的檔案,從而定位問題原因,修複程式異常。

背景資訊

在Linux中,如果程式突然異常終止或者崩潰,作業系統會將程式當時的記憶體狀態記錄下來,儲存在一個檔案中,這種行為就叫做coredump。此時,您可以查看分析coredump產生的core檔案,找出問題原因。

Linux中支援coredump(Action為Core)的Signal如下圖所示。

更多資訊,請參見coredump file

功能概述

ECI預設關閉coredump,避免磁碟佔用過多而導致業務不可用。您可以根據需要選擇以下一種方式開啟coredump:

  • 方式一:開啟coredump營運任務

    手動開啟coredump後,將產生一個營運任務。在容器運行異常終止或者退出時,觸發coredump產生的core檔案將自動儲存到OSS中。

  • 方式二:自訂設定core檔案儲存路徑

    支援自訂設定core檔案儲存到外掛儲存中,設定儲存路徑後,將自動開啟coredump。在容器運行異常終止或者退出時,觸發coredump產生的core檔案,將儲存到指定的外掛儲存的路徑下。

說明
  • 方式一便於操作,但有時效和地區等限制,可用於臨時調試和診斷程式。

    • 產生的營運任務為一次性任務,執行成功擷取到一次core檔案後,將會關閉coredump,並且營運任務有一定的期限(12小時),超出時間後任務將會失效。

    • 不支援以下地區:華北6(烏蘭察布)、華南2(河源)、華南3(廣州)、華東5(南京-本地地區)、菲律賓(馬尼拉)、韓國(首爾)、泰國(曼穀)。

  • 方式二需要額外配置外掛儲存,在程式運行狀態不穩定的情況下,可以採用該方式確保能夠擷取到core檔案,但如果程式有問題,反覆重啟可能會產生大量core檔案。

方式一:開啟coredump營運任務

通過Elastic Container Instance控制台,可以手動開啟coredump營運任務。

  1. 登入Elastic Container Instance控制台

  2. 為ECI執行個體開啟coredump。

    1. 單擊目標執行個體ID,開啟執行個體詳情頁面。

    2. 單擊營運頁簽,然後選擇Coredump頁簽,單擊開啟

      開啟coredump後,系統將產生一個營運任務,未觸發coredump時,任務狀態為等待中

      coredump-1

  3. 觸發coredump。

    串連ECI執行個體,在容器內執行sleep 100命令後按Ctrl+\鍵,觸發coredump,產生的core檔案將自動儲存到OSS中。coredump2

  4. 下載core檔案。

    觸發coredump產生core檔案後,營運任務的狀態將變為成功,此時單擊對應結果列中的下載即可下載core檔案到本地。

    coredump-2

    說明

    如果下載沒有反應,請檢查瀏覽器的網站使用權限設定。

方式二:自訂設定core檔案儲存路徑

core檔案一般用於離線分析問題,因此設定core檔案的儲存路徑時,一般採用外掛儲存,而不是儲存在容器本地路徑,避免容器退出而丟失core檔案。ECI支援自訂設定core檔案儲存路徑,設定後將自動開啟coredump。

重要

配置的路徑不能以|開頭,即不能通過coredump來配置可執行程式。

以使用NAS作為外掛儲存為例,配置樣本如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredump-test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-core-pattern: "/data/dump-a/core"    # 設定core檔案儲存路徑
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
          - name: nas-volume
            mountPath: /data/dump-a/
      volumes:     # 掛載NAS
        - name: nas-volume
          csi:
            driver: nasplugin.csi.alibabacloud.com
            fsType: nas
            volumeAttributes:
              server: "0389a***-nh7m.cn-shanghai.extreme.nas.aliyuncs.com"
              path: "/"
              vers: "3"
              options: "nolock,tcp,noresvport"

常見問題

觸發coredump後,在控制台下載core檔案沒有反應,怎麼辦?

如果下載沒有反應,請檢查瀏覽器的網站使用權限設定。例如Chrome瀏覽器可以參考以下方式開啟許可權:

  1. 開啟Elastic Container Instance控制台,單擊瀏覽器地址欄前面的瀏覽器表徵圖表徵圖,選擇網站設定瀏覽器設定1

  2. 將配置項不安全內容改為允許瀏覽器設定2