it-swarm-ja.com

Linuxでのコアダンプの生成

私の箱に関して、非常に困惑することが起こっています。

以下は/etc/sysctl.confでの私の設定です。

kernel.core_pattern = core
kernel.core_uses_pid = 1

/etc/profileには、次のものがあります。

ulimit -S -c unlimited >/dev/null 2>1

そして、私は見てすべてを確認します:

cat /proc/sys/kernel/core_pattern
cat /proc/sys/kernel/core_uses_pid

したがって、ulimit -cを実行すると、unlimitedの値が返されます。

ulimit -S -cを実行すると、unlimitedの値が返されます。

ulimit -H -cを実行すると、unlimitedの値が返されます。

そして、実行中のプロセスに対してkill -6を実行すると、コアが取得されません。

ulimit -c unlimitedを実行してプロセスを再開し、kill -6を実行すると、コアが生成されます。

ソフトリミットとハードリミットの違いを誰かが説明できますか?

そして、ハード制限を変更する必要がありますか?

コアが生成されることもあれば、生成されないこともあるので、この状況は好きではありません。

Limits.confを変更しても、自分が何をしているのかを本当に理解したいです。

さらにいくつか開示する必要があるのは、RHEL 6環境(x86_64)で実行していることです。

また、十分なディスク容量があり、DAEMONプロセスでもsetuidプログラムでもありません。また、フォルダには新しいファイルを作成するための十分な権限があり、ランタイムディレクトリにはコアと呼ばれるファイル/フォルダはありません。

1
roymustang86

したがって、これが発生した理由は、ulimitが設定されたbashプロンプトに対して、スクリプトがshプロンプトで実行されていたためです。変じゃない?スクリプトをbashで実行するように変更しましたが、正常に動作するようになりました。

0
roymustang86

ハード制限とソフト制限については、 limit のBashマニュアルセクションで読むことができます。

シェルからプログラムを再起動するとコアファイルを取得すると言うので、/etc/profileを読み取る環境で元のプロセスが開始されていない可能性があります(そのファイルはログインシェルに対してのみ読み取られます)。そのプログラムを開始しているスクリプトにulimit -c unlimitedを追加することを検討してください(もちろん、プログラムを開始する行の前に)。

0
jjlin