뭘 이런걸..

Posted
Filed under Tech/프로그래밍
프로그래밍을 하다 보면 coredump file 을 남겨서 segfault 에 대한 debugging 을 원할 때가 있습니다. 하지만 Redhat Linux 는 전통적으로 기본으로 coredump file 을 생성하지 못하도록 되어 있습니다. 더군다나, init script 에서도 이렇게 남기지 않게 되어 있 곤란을 겪을 때가 있습니다.

그래서 RH 에서 coredump 를 남기기 위한 작업을 기술해 봅니다.

1. /etc/profile

대략 26라인 즈음에 보면

ulimit -S -c 0 > /dev/null 2>&1


이라는 설정으로 core 를 남기지 않도록 되어 있습니다. 암울 합니다. --;

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


와 같이 수정해 줍니다. 시스템 파일을 건드리고 싶지 않다면, ~/.bash_profile 이나 ~/.bashrc 에 설정 합니다.

2. /etc/sysctl.conf

커널 파라미터 역시 기본으로 core 를 남기지 않도록 되어 있습니다. /etc/sysctl.conf 에 아래 설정을 추가합니다.

kernel.suid_dumpable = 1 kernel.core_uses_pid = 1


설정을 한 후에, sysctl.conf 의 변경 사항을 커널에 반영합니다.

[root@www SPECS]# sysctl -p


여기까지는 시스템에서 기본적으로 coredump 를 남기도록 하는 겁니다.

RH 의 경우에는 한술 더 떠서, init script 로 실행하는 모든 데몬에 대해서 core 를 남기지 않도록 initscripts package 에서 관리하고 있습니다. 그러므로, /etc/init.d/httpd 를 실행했을 때 core
를 남기도록 하려면..

1. /etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited'


를 추가해 줍니다.

2. 위의 설정은 init script 로 실행된 모든 스크립트에 영향을 줍니다. 각 init script 에서 /etc/init.d/functions 를 호출하기 전에

DAEMON_COREFILE_LIMIT='unlimited'


를 넣어 주시면 반영이 됩니다.

참조: http://kbase.redhat.com/faq/FAQ_80_7935.shtm
2006/08/10 16:08 2006/08/10 16:08