ホームページ  >  記事  >  運用・保守  >  Linux がコア ファイルを生成しない場合の対処方法

Linux がコア ファイルを生成しない場合の対処方法

藏色散人
藏色散人オリジナル
2021-11-24 11:17:247648ブラウズ

Linux がコア ファイルを生成しない場合の解決策: 1. コア ダンプ ディレクトリが存在するかどうかを確認し、そのディレクトリに対する書き込み権限を持つようにプロセスを設定します; 2. サービス プログラムが seteuid() を呼び出しているかどうかを確認します; 3.十分な大きさにする コアファイルのサイズ制限; 4. プロファイルなどを変更します。

Linux がコア ファイルを生成しない場合の対処方法

#この記事の動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux がコア ファイルを生成しない場合はどうすればよいですか?コアファイルが生成されないのはなぜですか?

1. コア ダンプが保存されているディレクトリが存在し、プロセスがそのディレクトリへの書き込み権限を持っていることを確認してください。

コア ダンプが保存されるディレクトリはプロセスの現在のディレクトリであり、通常は、プロセスを開始するコマンドが発行されたときにプロセスが配置されていたディレクトリです。ただし、スクリプトを通じて開始された場合、スクリプトによって現在のディレクトリが変更される可能性があり、この場合、プロセスの実際の現在のディレクトリは、スクリプトが最初に実行されたディレクトリとは異なります。この時点で、「/proc//cwd」シンボリック リンクのターゲットを表示して、プロセスの実際の現在のディレクトリ アドレスを確認できます。システム サービスを通じて開始されたプロセスも、この方法で表示できます。

2. プログラムが seteuid()/setegid() を呼び出してプロセスの実効ユーザーまたはグループを変更する場合、システムはデフォルトでこれらのプロセスのコア ダンプを生成しません。

MySQL など、多くのサービス プログラムは seteuid() を呼び出します。mysqld_safe を実行して MySQL を起動するためにどのユーザーを使用しても、mysqld の有効なユーザーは常に msyql ユーザーです。最初にユーザー A としてプログラムを実行したが、PS に表示されるプログラムのユーザーが B である場合、これらのプロセスは seteuid を呼び出しています。これらのプロセスがコアダンプを生成できるようにするには、(echo "1" > /proc/sys/kernel/suid_dumpable) が必要です。

3. ご存知のとおり、十分な大きさのコア ファイル サイズ制限を設定する必要があります。

プログラムがクラッシュしたときに生成されるコア ファイルのサイズは、プログラムの実行時に占有されるメモリのサイズです。しかし、プログラムがクラッシュしたときの動作は通常の動作からは予測できず、例えばバッファオーバーフローなどのエラーによりスタックが破壊される可能性があるため、ある変数の値がめちゃくちゃに変更されてしまうことがよくあります。プログラムはこのサイズを使用してメモリを確保するため、プログラムが通常よりも多くのメモリを占有する可能性があります。したがって、通常の動作中にプログラムが占有するメモリがどれほど少なくても、コア ファイルが生成され、サイズ制限が無制限に設定されていることを確認することをお勧めします。

4. /etc/profile に

ulimit -c unlimited > /dev/null 2?&1

を追加します。 5. 次のように設定すると、通常 CLI で開始されるプログラムをプログラムの外で終了できます。

ulimit -c unlimited

Generateコアダンプファイル。ただし、デーモン モードで実行されるプログラムの場合、CLI によって開始されるプログラムとの主な違いは、

cwd (現在の作業ディレクトリ) を含むプロセスの実行環境です。たとえば、相対パスを使用してコア ファイルの形式を定義する場合、/proc/sys/kernel/core_pattern を次のように定義します。

core-%e-%p-%t

一般的に、デーモン ファイルの cwd は / であり、次のようにすることができます。 /proc//cwd を渡して表示します。通常は / ディレクトリに接続します。また、ユーザーがこのディレクトリに対する書き込み権限を持っていない場合、コア ダンプ ファイルは生成されません。

最も直接的な解決策は、/proc/sys/kernel/core_pattern を絶対パス /data/coredump/core-%e-%p-%t

に変更し、これを確実にすることです。基本的にはOKです。

/proc/sys/kernel/core_pattern ファイル内のコア ダンプ ファイル形式を絶対パスに変更します。例:

/data/coredump/core-%e-%p-%t

コア ファイルが生成されなくなるのはどのような場合ですか?

次の条件ではコア ファイルは生成されません。

(a) プロセスがユーザー ID 設定であり、現在のユーザーがプログラムの所有者ではない場合ファイル;

(b) プロセスは set-group-ID であり、現在のユーザーはプログラム ファイルのグループ所有者ではありません;

(c) ユーザーには、次の権限がありません。現在の作業ディレクトリに書き込みます;

( d) ファイルが大きすぎます。コア ファイルのアクセス許可 (これ以前にファイルが存在していないと仮定します) は通常、ユーザー読み取り/書き込み、グループ読み取り、およびその他の読み取りです。

推奨学習: 「Linux ビデオ チュートリアル

以上がLinux がコア ファイルを生成しない場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。