コアダンプとは、アプリケーションがクラッシュまたは予期せず終了したときのメモリ状態を含むファイルです。オペレーティングシステムは、後のデバッグと分析のためにこのファイルを作成します。このトピックでは、Elastic Container Instance (ECI) インスタンスで coredump を有効にする方法について説明します。これにより、予期しないコンテナ終了時のコアファイルを分析して問題の原因を特定し、アプリケーションを修正できます。
背景情報
Linux では、アプリケーションが予期せず終了したりクラッシュしたりすると、オペレーティングシステムはアプリケーションのメモリ状態を記録し、ファイルに保存します。このプロセスをコアダンプと呼びます。その後、コアファイルを分析して問題の原因を特定できます。
次の図は、コアダンプをトリガーする Linux シグナルを示しています。これらのシグナルでは、デフォルトのアクションは Core です。
詳細については、「coredump file」をご参照ください。
概要
デフォルトでは、ECI インスタンスの coredump は無効になっています。これは、過剰なディスク使用によるサービス停止を防ぐためです。次のいずれかの方法で coredump を有効にできます:
-
方法1: coredump O&M タスクの有効化
手動で coredump を有効にすると、システムは O&M タスクを作成します。コンテナが異常終了または終了すると、生成されたコアファイルは自動的に OSS に保存されます。
-
方法2: コアファイルの保存パスのカスタマイズ
カスタムの保存パスを指定することで、コアファイルを外部ストレージに保存できます。保存パスを設定すると、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 に保存されます。# sleep 100 ^\Quit (core dumped) -
コアファイルをダウンロードします。
coredump がトリガーされ、コアファイルが生成されると、O&M タスクのステータスは 成功 に変わります。ダウンロード 列の [ダウンロード] をクリックして、コアファイルをダウンロードします。
説明ダウンロードが開始されない場合は、ブラウザーのサイトの権限設定を確認してください。
API
-
ECI インスタンスの coredump を有効にします。
CreateInstanceOpsTask API を呼び出して O&M タスクを作成します。対象の ECI インスタンスを指定し、OpsType パラメーターを
coredumpに、OpsValue パラメーターをenableに設定します。詳細については、「CreateInstanceOpsTask」をご参照ください。説明ECI インスタンスを指定するときは、インスタンスの作成中に CorePattern パラメーターが設定されていないことを確認してください。
-
coredump をトリガーします。
ECI インスタンスに接続します。コンテナ内で、
sleep 100コマンドを実行し、Ctrl+\を押して coredump をトリガーします。生成されたコアファイルは自動的に OSS に保存されます。 -
コアファイルをダウンロードします。
DescribeInstanceOpsRecords API を呼び出して O&M タスクの結果を表示します。応答の ResultContent フィールドには、OSS 内のコアファイルの URL が含まれています。この URL にアクセスしてコアファイルをダウンロードできます。
方法2: 保存パスのカスタマイズ
コアファイルは通常、オフライン分析に使用されます。そのため、コンテナ内のローカルパスではなく、外部ストレージに保存することを推奨します。これにより、コンテナが終了したときにコアファイルが失われるのを防ぎます。ECI では、コアファイルのカスタム保存パスを指定できます。パスを設定すると、coredump は自動的に有効になります。
CreateContainerGroup API を呼び出して ECI インスタンスを作成するときに、CorePattern パラメーターを渡してコアファイルの保存パスを設定できます。次の表に、関連するパラメーターを示します。詳細については、「CreateContainerGroup」をご参照ください。
ボリュームの種類に応じてボリュームパラメーターを設定します。
|
パラメーター |
タイプ |
例 |
説明 |
|
CorePattern |
String |
/data/dump-a/core |
コアファイルの保存パス。このパスは、マウントされたボリューム内にある必要があります。 重要
パスはパイプ文字 ( |
|
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 サーバーのアドレス。 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/ |
マウントパス。 ボリュームのコンテンツは、コンテナ内のマウントパスにある既存のコンテンツを上書きします。パスが正しいことを確認してください。 |
次の例では、Alibaba Cloud File Storage NAS ファイルシステムを外部ストレージとして使用する方法を説明します:
-
インスタンス A という名前の ECI インスタンスを作成し、NAS ファイルシステムをマウントして、コアファイルの保存パスを設定します。
CreateContainerGroup API を呼び出してインスタンス 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/coreに保存されます。# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /data/dump-a/ # ls # sleep 100 ^\Quit (core dumped) # ls core.17 -
インスタンス A をリリースします。
-
同じ NAS ファイルシステムをインスタンス B という名前の別の ECI インスタンスにマウントします。
CreateContainerGroup API を呼び出してインスタンス 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 がリリースされた後も失われず、分析に利用できます。# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # cd /data/dump-b/ # ls core.17
よくある質問
コンソールで [ダウンロード] をクリックしてもダウンロードが開始されません。どうすればよいですか?
ダウンロードが開始されない場合は、ブラウザーのサイトの権限設定を確認してください。たとえば、Chrome では、次の手順に従って必要な権限を付与します:
-
Chrome ブラウザーのアドレスバーの左側にある鍵アイコンをクリックし、ポップアップパネルで [サイトの設定] をクリックします。
-
サイトの権限リストで [安全でないコンテンツ] を見つけ、その権限を [許可] に設定します。