Как получить дамп ядра из apache при segfaulting


13

Я следовал инструкциям из многих мест в Интернете о том, как получить дамп ядра от apache, когда он создает 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 x64 с httpd-2.2.3-65.el5.centos.3иphp-5.3.20-13.el5.art

Любая помощь приветствуется!


Имеет ли apache какое-либо разрешение на запись в файл, указанный вами в директиве CoreDumpDirectory? Это должно принадлежать apache.
Валентин Байрами

Я установил его в / tmp, который является общедоступным для записи, но я попробую где-нибудь еще и передам его в собственность apache
chrismcb

Спасибо - это произвело дамп, но не там, где я его установил! Я установил CoreDumpDirectoryдля, /tmp/dumpsи он сбросил до /tmp... теперь с отладкой
chrismcb

Рад, что вы поняли это!
Валентин Байрами

Ответы:


7

Мой ответ таков:

  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


Да, я только что сделал это, но это /tmpвсе равно закончилось !
chrismcb

6
Это никогда ни к chmod 777чему
хорошему

1
@sendmoreinfo Но что, если ваш вариант использования делает что-то полностью изменяемое и исполняемое для внешнего мира? ;-)
avgvstvs

8
Вам разрешено стрелять себе в ногу, только не проповедуйте это.
sendmoreinfo

0

Обратите внимание, что если вы PrivateTmp=trueустановили в своей /usr/lib/systemd/system/apache2.service(или как она называется в вашей системе), то есть Apache фактически ищет /tmpчто-то вроде этого /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache не сможет писать в этот каталог, и вы вообще не получите дамп памяти (из-за в systemdкаталог tmp, имеющий 700 разрешений только для root).

Решением является либо установка, PrivateTmp=falseлибо изменение разрешения каталога systemd tmp после запуска сервера.

Я потратил часы на это, чтобы только сейчас, наконец, понять, в чем проблема.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.