2013年9月11日水曜日

COREファイルの出力先

COREファイルの出力先についてよくわからないことがある.

COREファイルの出力先は, 「/proc/sys/kernel/core_pattern」に定義されており, RHEL6/CentOS6はデフォルトで以下のように定義されている.
|/usr/libexec/abrt-hook-ccpp <hogehoge>
<hogehoge>の部分はRHELとCentOSで異なっていた.
Linux2.6.19以降, 上記のようにCOREファイルをパイプ後方のプログラムの標準入力に渡すことができるようだ. この場合, 「abrt-hook-ccpp」というプログラムに渡している.
つまり, バグ報告プログラム「ABRT」にCOREファイルを渡すということが読み取れる.

ということは, COREファイルは「ABRT」に渡されるのだから, 実行ファイルと同じディレクトリには出力されなくなっているのではないだろうか?
ちょっと調べてみると, このページには, 実行ファイルと同じディレクトリにCOREファイルを出力するのであればcore_patternの記述を変更しなさいと書かれている(3. Ruling out ABRTのところ).

ところが, RHEL6.1がインストールされたとある環境では, core_patternで「ABRT」に渡しているのにもかかわらず, COREファイルが実行ファイルと同じディレクトリに出力されていた. もしかして「ABRT」が正常に機能していない場合は, 実行ファイルの場所に出力される仕様なのか?

【2013/09/12 追記】
以下のドキュメントを見つけた.

How to Enable Creation of Core Dump Files Due to Crashed Applications in Fedora Linux Distribution

この中に以下の記述がある.
$sysctl -a|grep core_pattern
kernel.core_pattern = |/usr/libexec/abrt-hook-ccpp /var/cache/abrt %p %s %u %c

“abrtd” creates a sub-directory (named something like “ccpp-1279914365-14618″) in the directory “/var/cache/abrt” as shown in the value of the variable. This also means that the core files will also be stored in that sub-directory in the “/var/cache/abrt” directory (in addition to the current directory where application was run). ABRT daemon also creates other files in addition to the core dump files in the sub-directory to further help users in debugging the crash issue.
 つまり, abrt-hook-ccppにパイプすると, 実行ファイルと同じディレクトリにCOREファイルを出力するのに加えて, バグレポート用にCOREファイルを「/var/cache/abrt/ccpp-<hoge>(RHEL6.1では, /var/spool/abrt/ccpp-<hoge>)」配下にも出力するということだ.

実際にプロセスをKILLしてみたところ, COREファイルが両方に出力されることを確認できた. この状態だとCOREファイルのサイズが倍になるということだから, 知らずにシステム設計してしまうと, ディスク使用量の見積もりを間違えて大変なことになるな.

0 件のコメント:

コメントを投稿