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

Я следовал инструкциям из многих мест в Интернете о том, как получить дамп ядра от 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

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

1 ответ

Решение

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

  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 установить в вашем /usr/lib/systemd/system/apache2.service (или как он там называется в вашей системе), то есть Apache действительно ищет /tmp внутри что-то вроде /tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/, Apache не сможет писать в этот каталог, и вы не получите дамп ядер (из-за systemd tmp, имеющий 700 разрешений только для root).

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

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

Другие вопросы по тегам