Как получить дамп ядра из apache при segfaulting
Я следовал инструкциям из многих мест в Интернете о том, как получить дамп ядра от apache, когда он генерирует segfault, но он по-прежнему отказывается генерировать дамп.
Я имею:
- Добавил
CoreDumpDirectoryдиректива вhttpd.confфайл и установите его/tmp - выполненный
ulimit -c unlimited - Предоставлен шаблон для дампа с использованием
echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern - Также побежал
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 ответ
Мой ответ таков:
Установите директиву следующим образом
CoreDumpDirectory /tmp/mycoredumpСоздайте каталог:
mkdir -p /tmp/mycoredumpПрисвоить право собственности на каталог www-data или httpd
chown -R www-data:www-data /tmp/mycoredumpУстановите разрешения для:
chmod 777 /tmp/mycoredumpПерезапустите 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 после запуска сервера.
Я потратил на это часы, чтобы только сейчас наконец понять, в чем проблема.