コアダンプが出ない時(Linux)

 プログラミングをしていて一番困るバグがメモリ破壊系のバグですが、Linux環境の場合コアダンプを原因究明に役立てる事が出来ます。
 ただ、コアダンプ出力の設定が正しいのに、コアダンプすら吐かずにプログラムが落ちた場合、どうやって解析すべきか困ってしまうんですよね。

 そんな訳で、コアダンプすら吐けずに落ちるケースについて調べていたのですが、メモリ破壊(segmentation fault)発生時はLinux Kernelの「signal.c」から「do_coredump()」を呼び出してコアダンプを吐くようです。
 そして、コアダンプが吐けない場合は「do_group_exit()」が呼ばれ、何故コアダンプを吐けなかったのかログ出力という流れですね。

 海外フォーラムのアーカイブを調べてみたところ、ログに「BUG: Bad page map in process」が表示されている場合は、該当環境のハードウェアに問題が無いかチェックするのが良さそうです。

 チェックするのは、「システムをオーバークロックして不安定にしてないか」や、「ストレージが壊れていていないか」といった感じでしょうか。
 ここでいうストレージは、物理メモリやswap指定しているストレージが対象になるのかな?

 ただ、コアダンプを吐けない理由すら表示されない場合もあって、その場合はカーネル空間のメモリを誰かが破壊していないか疑った方が良さそうです。
 該当Kernelバージョンでバグ報告が上がっていなければ、該当環境に追加したLKMとか、独自拡張したKernel実装のメモリ操作を再確認かな。

コメント