출처 :
http://dakrink.tistory.com/21리눅스에서 프로그램 개발을 하다가 보면은 세그먼트 폴트가 나는 경우 Debugging을 해야되는 상황이 있을 수 있다. 그런데 우리의 레드헷 기본적으로 Coredump를 남기지 않도록 설정이 되어 있어서 곤란한 경우가 있다.RHEL에서 Coredump를 기록하도록 설정하는 것을 설명한다.
Coredump 생성을 위한 방법으로는 두가지가 있다. 한가지는 시스템에서 무조건적으로 coredump를 생성하도록 하는 경우가 있고 다른 한가지는 init script에서 남기도록 하는 경우가 있다.
1. 'core dump' 는 무엇인가?
core dump 는 process 들의 image copy 이다.이것은 file 의 형태로 구성되며 현재 수행중인 directory 에 발생한다.
2. 발생되는 원인
원인은 여러가지가 있을 수 있으나 대체적으로 임의의 process 가 OS가 원하지 않는 일을 수행하려 할때 발생한다.
공통적으로 program 이 자신의 영역밖의 memory 를 access 하고자 시도할때. program 이 고갈되었거나 사용이 불가능한 resource 를 얻고자 할때 Illegal instructions 에 의해 무언가가수행되려 할때.
Unix systems 에서는 process의 불법적인 행위를 금하고자 signal 을 보내는데 이것은 user가 이러한 signal 을 manual 하게 보냄으로써 발생시킬수도 있다.
3. 시스템에서 Coredump를 남기도록 설정
/etc/profile 파일을 vi나 다른 에디터 프로그램을 열어서 다음의 라인을 찾아보자.
- ulimit -S -c 0 > /dev/null 2>&1
위에 줄이 Coredump를 남기지 않도록 하는 주범이다.
그 부분을 다음과 같이 수정하라.
- ulimit -c unlimited > /dev/null 2>&1
/etc/profile를 수정하면은 시스템 전체적으로 영향을 받는다. 만약에 시스템 전체적으로 영
향을 받지 않고 자주 사용하는 시스템 계정에서만 영향을 받고 싶다면은 /etc/profile를 수정
하지 말고 ~/.bash_profile나 ~/.bashrc를 수정하도록 한다.
/etc/profile 말고 커널 파라메타에도 기본적으로 Coredump를 남기지 않도록 되어 있다.
/etc/sysctl.conf에 다음의 부분을 기술한다.
- kernel.suid_dumpable = 1
- kernel.core_uses_pid = 1
설정을 추가 한 뒤에 sysctl -p로 커널 파라메터를 지금 현재 시스템에 반영하는 것을 잊지
말어야 한다. 안그러면은 재부팅 되고나서야 시스템에 반영이 된다.
4. Init script로 실행하는 데몬에 Coredump 설정 방법 RHEL의 경우 init script로 실행하는 데몬에 대해 initscript package에서 coredump를 남기
지 않도록 관리하고 있다.
만약에 /etc/init.d/httpd에 대해 coredump를 남기도록 세팅하려면은 다음과 같이 수정하도
록 한다.
/etc/sysconfig/init에 다음의 라인을 추가 한다.
- DAEMON_COREFILE_LIMIT='unlimited'
이 설정을 init script로 실행하는 모든 스크립트에 영향을 미치게 된다.
각 init script에서 /etc/init.d/functions을 호출하기 전에
- DAEMON_COREFILE_LIMIT='unlimited'
를 넣어주면은 된다.