全部產品
Search
文件中心

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

更新時間:Jul 06, 2024

coredump是指在程式運行過程中發生異常終止或崩潰時,作業系統將程式的記憶體內容轉儲到一個特殊的檔案中,以便於後續的調試和分析。本文介紹如何為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營運任務

控制台

  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

    說明

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

OpenAPI

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

    調用CreateInstanceOpsTask介面建立營運任務,需指定目標ECI執行個體,然後將OpsType設為coredump,OpsValue設為enable,即可開啟coredump。更多資訊,請參見CreateInstanceOpsTask

    說明

    指定ECI執行個體時,需確保目標ECI執行個體在建立時沒有設定CorePattern。

  2. 觸發coredump。

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

  3. 下載Core檔案。

    調用DescribeInstanceOpsRecords介面查看營運任務的結果,從返回資訊的ResultContent中,可以擷取core檔案儲存在OSS中的地址,訪問該地址即可下載core檔案。

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

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

調用CreateContainerGroup介面建立ECI執行個體時,可傳入CorePattern參數來設定core檔案儲存路徑。相關參數說明如下,更多資訊,請參見CreateContainerGroup

說明

樣本以NFSVolume作為樣本,Volume相關參數請根據實際Volume類型進行配置。

名稱

類型

樣本值

描述

CorePattern

String

/data/dump-a/core

自訂設定Core dump檔案的儲存目錄。

重要

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

Volume.N.Name

String

volume1

資料卷名稱。

Volume.N.Type

String

NFSVolume

資料卷類型。本文以NFSVolume為例。

Volume.N.NFSVolume.Path

String

/dump

NFS資料卷的路徑。

Volume.N.NFSVolume.Server

String

143b24****-gfn3.cn-beijing.nas.aliyuncs.com

NFS伺服器位址。

如果使用阿里雲Apsara File Storage NAS,則此處為NAS檔案系統的掛載點地址。

Container.N.VolumeMount.N.Name

String

volume1

要掛載到容器的資料卷的名稱,對應Volume.N.Name的值。

Container.N.VolumeMount.N.MountPath

String

/data/dump-a/

掛載目錄。

容器掛載目錄下的內容會被資料卷的內容直接覆蓋,請準確填寫。

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

  1. 建立一台ECI執行個體A,掛載NAS並設定core檔案儲存路徑。

    調用CreateContainerGroup介面建立ECI執行個體A時傳入以下參數,將NAS的/dump/目錄掛載到容器的/data/dump-a/目錄,將core檔案儲存路徑設定為/data/dump-a/core

    ContainerGroupName=test-a
    SecurityGroupId=sg-bp1daxpbz9lzpvvc****
    VSwitchId=vsw-bp1gds63lmlm7ib05****
    # 聲明資料卷
    Volume.1.Name=volume1
    Volume.1.Type=NFSVolume
    Volume.1.NFSVolume.Path=/dump/
    Volume.1.NFSVolume.Server=143b24****-gfn3.cn-beijing.nas.aliyuncs.com
    # 為容器掛載資料卷
    Container.1.Name=nginx
    Container.1.Image=registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
    Container.1.VolumeMount.1.Name=volume1
    Container.1.VolumeMount.1.MountPath=/data/dump-a/
    # 設定core檔案儲存路徑
    CorePattern=/data/dump-a/core
  2. 在執行個體A的容器任意目錄下觸發coredump。

    如下樣本,在容器內執行sleep 100命令後同時按Ctrl鍵和\鍵,觸發coredump後,core檔案已儲存到容器的/data/dump-a/路徑下。

    coredump4

  3. 釋放ECI執行個體A。

  4. 將同一NAS掛載到另一台ECI執行個體B。

    調用CreateContainerGroup介面建立ECI執行個體B時傳入以下參數,將同一NAS的/dump/目錄掛載到容器的/data/dump-b/目錄。

    ContainerGroupName=test-nas-b
    SecurityGroupId=sg-bp1daxpbz9lzpvvc****
    VSwitchId=vsw-bp1gds63lmlm7ib05****
    # 聲明資料卷
    Volume.1.Name=volume1
    Volume.1.Type=NFSVolume
    Volume.1.NFSVolume.Path=/dump/
    Volume.1.NFSVolume.Server=143b24****-gfn3.cn-beijing.nas.aliyuncs.com
    # 為容器掛載資料卷
    Container.1.Name=nginx
    Container.1.Image=registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
    Container.1.VolumeMount.1.Name=volume1
    Container.1.VolumeMount.1.MountPath=/data/dump-b/
  5. 在執行個體B的容器中查看core檔案。

    如下樣本,在容器的/data/dump-b/路徑下可以看到core檔案,core檔案儲存到外掛儲存後,並沒有隨著執行個體A的釋放而丟失,您仍可以查看分析core檔案。

    coredump5

常見問題

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

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

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

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