Linux のプロセスクラッシュの原因をコアダンプ技術を使用して追跡する簡単な分析

Linux のプロセスクラッシュの原因をコアダンプ技術を使用して追跡する簡単な分析

最近、プロジェクトで問題が発生しました。サーバー側のプログラムが突然クラッシュして終了しました。クラッシュの原因、つまりプロセスが終了したときに実行されていた関数とそのステータスを特定するために、コアダンプ技術を使用しました。

システムで coredump が有効になっている場合、より正確には、現在のシェル環境で coredump が有効になっている場合、現在のシェル環境のプログラムがクラッシュして終了すると、その時点でのプロセス スタックのメモリ状態がコア ファイルに書き込まれます。 gdb を使用して、このコア ファイル (gdb a.out core) に保存されているスタックのステータスを表示します。 (コアダンプとシェルの詳細については、私の別のブログ「dotnet-dump を使用して .net core 3.0 が CPU を 100% 占有する理由を調べる」を参照してください。gdb については、「gdb デバッグ コマンドの使用と概要」を参照してください)

コア ファイルのデフォルトの場所は実行可能ファイルの場所であり、デフォルトの名前は core です。場所と名前は設定できます。私の設定は次のとおりです。

mkdir /home/corefile 
echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

この方法では、生成されたコア ファイルは /home/corefile ディレクトリに配置され、コア ファイル名は core-%e-%p-%t の形式で表示されます。ここで、%e は実行可能ファイルの名前、%p はプロセス、%t はコア ファイルが生成された時刻 (Unix 時間であることに注意してください) を表します。

コアダンプを引き起こす可能性があるルーチンは次のとおりです。

交差した線は、コアダンプが発生する場所です。実行後、/home/corefile ディレクトリに次のファイルが生成されます。

[root@localhostwin7]# ls /home/corefile/ 

a.out は実行ファイル名、5082 は PID、1490760381 はファイルが生成された Unix 時間です。 a.out ファイルと core ファイルをディレクトリに配置し、次のコマンドを使用します。

gdb a.out core-a.out-5082-1490760381

gdb に入り、backtrace コマンドを使用して、プロセスが終了したときのスタックのメモリ ステータスを次のように表示します。

プロセスが終了すると、最後に実行される関数は square 関数であることがわかります。 ————————————————

要約する

上記は、Linux でプロセス クラッシュの原因をトレースするために coredump テクノロジを使用する方法について紹介したものです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。

<<:  vscodeを使用してReact Native開発環境を構築する方法を教えます

>>:  SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

推薦する

虫眼鏡コンポーネントのネイティブ js 実装

この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...

Vue 父子価値移転、兄弟価値移転、子父価値移転の詳細な説明

目次1. 親コンポーネントが子コンポーネントに値を渡す1. 親コンポーネント.vue 2. サブコン...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...

SQL ストアド プロシージャの取得、データ取得、プロセス分析

この記事は主に、SQL のストアド プロシージャから返されたデータを取得するプロセスの分析を紹介しま...

Zabbix WEB 監視実装プロセス図

Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....

設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...

モバイルフロントエンド適応ソリューション(概要)

ネットで検索してみたところ、多くの面接でモバイル適応方法について質問されることが分かりました。最近い...

CSS3 を使用して楕円軌道の回転を実装するサンプルコード

最近、次のような効果を達成する必要がある最初は、CSS3D回転を使用して記述すると、次の効果しか得ら...

nginxプロセスロックの実装の詳細な説明

目次1. nginxプロセスロックの役割2. エントリーレベルのロックの使用3. nginxプロセス...

mysql5.7でbinlogを使用してデータを復元する方法

ステップ1: MySQLでbinlogが有効になっていることを確認する '%log_bin%...

Dockerfile を使用して Java ランタイム環境のミラーを作成する方法

現在の環境は次のとおりです。セントロス7.5 docker-ce 18.06.1-ce 1. まずc...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

ソースコード分析からTomcatがサーブレットの初期化を呼び出す方法の詳細な説明

目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...

Pure CSS3はdivの出入りを順番に実現します

この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...