[server] segfaulting 할 때 아파치에서 코어 덤프를 얻는 방법

segfault를 생성 할 때 아파치에서 코어 덤프를 얻는 방법에 대한 온라인의 여러 위치에서 지침을 따랐지만 여전히 덤프 생성을 거부합니다.

나는 가지고있다:

  1. CoreDumpDirectory지시문을 httpd.conf파일에 추가하고 로 설정/tmp
  2. 실행
    ulimit -c unlimited
  3. 사용하여 덤프 패턴 제공
    echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. 또한 달렸다
    echo 0 > /proc/sys/kernel/core_uses_pid

Httpd가 다시 시작되었지만 여전히 덤프가 작성되지 않았습니다.

내가 생각에 CentOS 5.8 64를 실행하는거야 httpd-2.2.3-65.el5.centos.3php-5.3.20-13.el5.art

어떤 도움이라도 대단히 감사하겠습니다!



답변

내 대답은 이것입니다 :

  1. 지시문을 다음과 같이 설정하십시오.

    CoreDumpDirectory /tmp/mycoredump

  2. 디렉토리를 작성하십시오.

    mkdir -p /tmp/mycoredump

  3. www-data 또는 httpd 디렉토리에 소유권을 지정하십시오.

    chown -R www-data:www-data /tmp/mycoredump

  4. 권한을 다음으로 설정하십시오.

    chmod 777 /tmp/mycoredump

  5. Apache를 다시 시작하십시오.

    service apache2 restart


답변

아파치가 실제로 내부에서 찾는 것을 의미하는 (또는 시스템에서 호출 된 무엇이든) PrivateTmp=true설정 하면 아파치는 해당 디렉토리에 쓸 수 없으며 코어가 전혀 덤프되지 않습니다. 받는 tmp 디렉토리 700 루트 전용 파마를 가짐)./usr/lib/systemd/system/apache2.service/tmp/tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/systemd

해결책은 PrivateTmp=false서버가 시작된 후 systemd tmp 디렉토리의 권한을 설정 하거나 수정하는 것입니다.

나는 지금 막 문제가 무엇인지 마침내 깨닫기 위해 몇 시간을 낭비했습니다.


답변