コアダンプは、プログラムが異常終了またはクラッシュしたときに発生します。オペレーティングシステムは、後でデバッグと分析を行うために、プログラムのメモリ内容をファイルにダンプします。この Topic では、Elastic Container Instance (ECI) の coredump を有効にする方法について説明します。コンテナーが異常終了した場合、生成されたコアファイルを表示および分析して、問題の原因を特定し、プログラムを修正できます。
背景情報
Linux では、プログラムが予期せず終了したりクラッシュしたりすると、オペレーティングシステムはその時点でのプログラムのメモリ状態を記録し、ファイルに保存します。この操作はコアダンプと呼ばれます。その後、生成されたコアファイルを表示および分析して、問題の原因を特定できます。
次の図は、Linux で coredump をサポートする信号を示しています。これらの信号の操作は Core です。
詳細については、「coredump ファイル」をご参照ください。
機能概要
デフォルトでは、ECI インスタンスの coredump は無効になっており、過度のディスク使用率によって引き起こされる可能性のあるサービスの可用性の低下を防ぎます。必要に応じて、次のいずれかの方法で coredump を有効にできます。
方法 1: coredump O&M タスクを有効にする
手動で coredump を有効にすると、O&M タスクが生成されます。コンテナーが異常終了または終了すると、トリガーされた coredump は生成されたコアファイルを Object Storage Service (OSS) に自動的に保存します。
方法 2: コアファイルの保存パスをカスタマイズする
コアファイルを外部ストレージに保存できます。保存パスを設定すると、coredump が自動的に有効になります。コンテナーが異常終了または終了すると、トリガーされた coredump は生成されたコアファイルを外部ストレージの指定されたパスに保存します。
方法 1 は使いやすいですが、有効期間と利用可能なリージョンに制限があります。一時的なプログラムのデバッグと診断に適しています。
生成された O&M タスクはワンタイムタスクです。タスクが正常に実行され、コアファイルが取得されると、coredump は無効になります。O&M タスクは 12 時間有効です。この期間を過ぎると、タスクは無効になります。
この方法は、次のリージョンではサポートされていません: 中国 (ウランチャブ)、中国 (河源)、中国 (広州)、中国 (南京 - ローカルリージョン) (廃止)、フィリピン (マニラ)、韓国 (ソウル)、およびタイ (バンコク)。
方法 2 では、外部ストレージを設定する必要があります。プログラムが不安定な場合、この方法によりコアファイルを確実に取得できます。ただし、プログラムに問題がある場合、再起動を繰り返すと多数のコアファイルが生成される可能性があります。
方法 1: coredump O&M タスクを有効にする
コンソール
Elastic Container Instance コンソールにログインします。
ECI インスタンスの coredump を有効にします。
ターゲットインスタンスの ID をクリックして、インスタンス詳細ページに移動します。
[O&M] タブをクリックし、[Coredump] タブを選択して、[有効化] をクリックします。
coredump が有効になると、O&M タスクが生成されます。coredump がトリガーされない場合、タスクのステータスは [保留中] になります。

coredump をトリガーします。
ECI インスタンスに接続します。コンテナーで
sleep 100コマンドを実行し、Ctrl+\を押して coredump をトリガーします。生成されたコアファイルは自動的に OSS に保存されます。
コアファイルをダウンロードします。
coredump がトリガーされ、コアファイルが生成されると、O&M タスクのステータスが [成功] に変わります。[結果] 列の [ダウンロード] をクリックして、コアファイルをローカルコンピューターに保存します。
説明ダウンロードが開始されない場合は、ブラウザのサイト権限設定を確認してください。
OpenAPI
ECI インスタンスの coredump を有効にします。
CreateInstanceOpsTask 操作を呼び出して O&M タスクを作成します。ターゲット ECI インスタンスを指定し、`OpsType` パラメーターを
coredumpに設定し、`OpsValue` パラメーターをenableに設定します。これにより coredump が有効になります。詳細については、「CreateInstanceOpsTask」をご参照ください。説明インスタンスの作成時に `CorePattern` パラメーターが設定されていないことを確認してください。
coredump をトリガーします。
ECI インスタンスに接続します。コンテナーで
sleep 100コマンドを実行し、Ctrl+\を押して coredump をトリガーします。生成されたコアファイルは自動的に OSS に保存されます。
コアファイルをダウンロードします。
DescribeInstanceOpsRecords 操作を呼び出して O&M タスクの結果を表示します。応答の `ResultContent` には、OSS 内のコアファイルの URL が含まれています。この URL にアクセスしてコアファイルをダウンロードできます。
方法 2: コアファイルの保存パスをカスタマイズする
コアファイルは通常、オフラインの問題分析に使用されます。したがって、コアファイルの保存パスをコンテナー内のローカルパスではなく、外部ストレージに設定する必要があります。これにより、コンテナーが終了した場合にコアファイルが失われるのを防ぎます。ECI では、コアファイルの保存パスをカスタマイズできます。パスを設定すると、coredump が自動的に有効になります。
CreateContainerGroup 操作を呼び出して ECI インスタンスを作成するときに、`CorePattern` パラメーターを渡してコアファイルの保存パスを設定できます。次の表に、関連するパラメーターを示します。詳細については、「CreateContainerGroup」をご参照ください。
この例では `NFSVolume` を使用します。実際のボリュームタイプに基づいて `Volume` パラメーターを設定する必要があります。
名前 | タイプ | 例 | 説明 |
CorePattern | String | /data/dump-a/core | コアダンプファイルを保存するカスタムディレクトリ。 重要 パスを縦棒 ( |
Volume.N.Name | String | volume1 | ボリュームの名前。 |
Volume.N.Type | String | NFSVolume | ボリュームのタイプ。この Topic では、NFSVolume を例として使用します。 |
Volume.N.NFSVolume.Path | String | /dump | NFS ボリュームのパス。 |
Volume.N.NFSVolume.Server | String | 143b24****-gfn3.cn-beijing.nas.aliyuncs.com | NFS サーバーのアドレス。 Alibaba Cloud File Storage NAS を使用する場合、これは NAS ファイルシステムのマウントポイントのアドレスです。 |
Container.N.VolumeMount.N.Name | String | volume1 | コンテナーにマウントするボリュームの名前。値は `Volume.N.Name` の値と同じである必要があります。 |
Container.N.VolumeMount.N.MountPath | String | /data/dump-a/ | マウントディレクトリ。 このディレクトリの内容は、ボリュームの内容によって上書きされます。正しいディレクトリを入力していることを確認してください。 |
次の例は、NAS ファイルシステムを外部ストレージとして使用する方法を示しています。
インスタンス A という名前の ECI インスタンスを作成し、NAS ファイルシステムをマウントして、コアファイルの保存パスを設定します。
CreateContainerGroup 操作を呼び出してインスタンス A を作成するときに、次のパラメーターを渡して、NAS ファイルシステムの
/dump/ディレクトリをコンテナーの/data/dump-a/ディレクトリにマウントし、コアファイルの保存パスを/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/ # コアファイルの保存パスを設定する CorePattern=/data/dump-a/coreインスタンス A のコンテナーの任意のディレクトリで coredump をトリガーします。
次の例に示すように、コンテナーで
sleep 100コマンドを実行し、Ctrlキーと\キーを同時に押して coredump をトリガーします。コアファイルはコンテナーの/data/dump-a/パスに保存されます。
ECI インスタンス A をリリースします。
同じ NAS ファイルシステムを別の ECI インスタンスであるインスタンス B にマウントします。
CreateContainerGroup 操作を呼び出してインスタンス 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/インスタンス B のコンテナーでコアファイルを表示します。
次の例に示すように、コンテナーの
/data/dump-b/パスにコアファイルがあります。コアファイルは外部ストレージに保存されるため、インスタンス A がリリースされても失われません。引き続きコアファイルを表示および分析できます。
よくある質問
coredump をトリガーした後、コンソールで [ダウンロード] をクリックしてもダウンロードが開始されません。どうすればよいですか。
ダウンロードが開始されない場合は、ブラウザのサイト権限設定を確認してください。たとえば、Chrome ブラウザを使用している場合は、次の方法で権限を付与できます。
Elastic Container Instance コンソールを開きます。ブラウザのアドレスバーで
アイコンをクリックし、[サイトの設定] を選択します。
[安全でないコンテンツ] を [許可] に設定します。
