CentOS6でcoreを吐かせる方法
CentOS6ではセグメンテーション違反(segmentation fault)してもcoreを吐かない設定になっている。coreを吐かせてデバッグしたい場合は以下の設定が必要。
OS側の設定
sysctlでcore_patternの設定がABRT(Automated Bug Reporting Tool)になっているのでこれを止める。
$ cat /proc/sys/kernel/core_pattern |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
で確認。もしくは、
$ sysctl -a | grep 'kernel.core' kernel.core_uses_pid = 1 kernel.core_pattern = |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e kernel.core_pipe_limit = 4
以下のように手動で変更。
# sysctl -w kernel.core_pattern=core # sysctl -a | grep 'kernel.core' kernel.core_uses_pid = 1 kernel.core_pattern = core kernel.core_pipe_limit = 4 #
リブート後にも設定するためには/etc/sysctl.confに設定を追加する。また、abrt-ccppが起動するとcore_patternの設定をabrt-hook-ccppに変更するようなのでこれも止める。
# vi /etc/sysctl.conf 以下を追加する。 # Default of CentOS6 is # |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e kernel.core_pattern = core # chkconfig --list | grep abrt abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrt-oops 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off # chkconfig --del abrt-ccpp # chkconfig --list | grep abrt abrt-oops 0:off 1:off 2:off 3:on 4:off 5:on 6:off abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off # sync;sync;sync # shutdown -rt 0 now
ユーザ側の設定
ulimitを確認し、coreサイズをunlimited(もしくは任意のバイト数)に変更する。
$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited .... $ ulimit -c unlimited $ vi ~/.bashrc ulimit -c unlimited # これを最後の行に追加 $