13

I've followed instructions from many locations online on how to get a core dump from apache when it is producing a segfault, but it still refuses to generate the dump.

I have:

  1. Added the CoreDumpDirectory directive into the httpd.conf file and set it to /tmp
  2. Executed ulimit -c unlimited
  3. Provided the pattern for dumps using echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. Also ran echo 0 > /proc/sys/kernel/core_uses_pid

Httpd has been restarted, but still no dumps created.

I'm running CentOS 5.8 x64 with httpd-2.2.3-65.el5.centos.3 and php-5.3.20-13.el5.art

Any help would be much appreciated!

  • Does apache have any permission to write to the file you specified in CoreDumpDirectory directive? It should be owned by apache. – Valentin Bajrami Jan 18 '13 at 15:43
  • I've set it to /tmp which is publicly writable, but I'll try somewhere else and give it ownership to apache – chrismcb Jan 18 '13 at 15:48
  • Thanks - that did produce a dump, however not in the place I set it! I set the CoreDumpDirectory to /tmp/dumps and it dumped to /tmp... now on with debugging – chrismcb Jan 18 '13 at 15:53
  • Glad you figured it out! – Valentin Bajrami Jan 18 '13 at 15:54
7

My answer is this:

  1. Set up the directive as follow

    CoreDumpDirectory /tmp/mycoredump

  2. Create the directory:

    mkdir -p /tmp/mycoredump

  3. Assign ownership to the directory www-data or httpd

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

  4. Set permissions to:

    chmod 777 /tmp/mycoredump

  5. Restart Apache:

    service apache2 restart

| improve this answer | |
  • Yes, I did just about that, but it ended up dumping into /tmp anyway! – chrismcb Jan 18 '13 at 15:54
  • 6
    It's never a good idea to chmod 777 anything – sendmoreinfo Jan 19 '13 at 19:54
  • 1
    @sendmoreinfo But what if your use case is making something fully modifiable and executable to the outside world? ;-) – avgvstvs Aug 13 '15 at 13:50
  • 8
    You are allowed to shoot yourself in the foot, just don't preach this. – sendmoreinfo Aug 13 '15 at 21:53
1

Note that if you have PrivateTmp=true set in your /usr/lib/systemd/system/apache2.service (or whatever it's called on your system), meaning Apache actually looks for /tmp inside something like /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache won't be able to write to that dir and you won't get cores dumped at all (due to the systemd tmp directory having 700 root-only perms).

The solution is to either set PrivateTmp=false or modify the permission of the systemd tmp directory after the server starts.

I wasted hours on this to only just now finally realize what the problem was.

| improve this answer | |
  • 1
    Oh you have no idea how many hours I've wasted on this. Thanks for posting your answer! – Kirrus Jun 2 at 10:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.