LINUX.ORG.RU
решено ФорумAdmin

Как правильно дебажить apache?

 , ,


0

2

Имею:
ОС: FreeBSD 10
ПО: Apache 2.4
MPM: MPM_WORKER
3rd party modules: php 5.5
Доп. опции для компиляции php 5.5 и extensions: [x] ZTS Force Zend Thread Safety (ZTS) build
Компилятор: clang

Что случилось:
В dmesg регулярно получаю

pid 99894 (httpd), uid 80: exited on signal 10
pid 99897 (httpd), uid 80: exited on signal 11

Что сделал:
1) Погуглил. Однозначного решения нет, у каждого свой случай. Объединяет их только php как виновник трагедии.
2) Заставил систему и apache писать .core при падении

# sysctl kern.sugid_coredump=1
# echo "CoreDumpDirectory /tmp" >> /usr/local/etc/apache24/httpd.conf
теперь имею нормальные .core файл(ы)

Что НЕ получилось:

$ gdb httpd.core
...
This GDB was configured as "amd64-marcel-freebsd"..."/usr/home/user/httpd.core": not in executable format: File format not recognized

ладно, попробуем иначе

$ gdb
...
(gdb) core httpd.core
Core was generated by `httpd'.
Program terminated with signal 10, Bus error.
#0  0x00000008058cf008 in ?? ()

Тупик... Больше из gdb вытянуть я ничего не смог. Существует, якобы, lldb, но он по ум. не установлен, а установка требует нехилого велосипедизма...

Хочу также сообщить, что сайты пока работают, т.е. хоть дочерние процессы httpd и падают - новые снова появляются.

Что посоветуете предпринять?

Из возможных действий я предполагаю:

1) Скомпилировать всё с gcc, отладить с помощью gdb
2) Вытащить весь llvm проект из git, скомпилировать всё с новым clang, отладить с помощью неведомого для меня lldb
3) Написать багрепорт разрабам php, ждать неведомо сколько ответа, затем патча...
4) Перейти, наконец, на php-fpm (г-ди как же геморно его настраивать!) и отказаться от php в качестве модуля для apache
5) Использовать встроенные средства отладки apache (какие?! стандартные логи дают не ту инфу, что мне надо...)

linux не предлагать, я его уже натерпелся вдоволь на северах...

P.S. Впервые встречаю тупняк от разрабов freebsd: clang по умолчанию мы засунули, gcc из базовой поставки выбросили, а несовместимый с clang gdb оставили. Ну, блин, логика у них. Наверное, надо написать им гневный пост с матюками на их форум.

★★★★★

Ответ на: комментарий от anonymous

К тому же это лучший вариант хоть для продакшена, хоть для девелопмента.

anonymous
()

отказаться от php в качестве модуля для apache

this

Deleted
()

gdb httpd.core

Надо было использовать gdb /path/to/httpd httpd.core. В твоём варианте запуска gdb пытался загрузить корку как исполняемый файл.

i-rinat ★★★★★
()
Ответ на: комментарий от qulinxao

спокойно и методично.
qulinxao ★★ (29.09.2014 17:24:40) всегда приятно видеть умных людей

даже не знаю как реагировать...

reprimand ★★★★★
() автор топика
Ответ на: комментарий от reprimand

правда, всё равно, дебаг полезной информации не дал

Во первых, оно же тебе говорит: «no debugging symbols found». Собери апач и пых с дебагом и будешь в трейсе сидишь названия функций и номера строк в коде. Во вторых, после падения выполни backtrace в gdb чтоб увидеть какие вызовы были до того как упало.

iron ★★★★★
()
Ответ на: комментарий от iron

«no debugging symbols found». Собери апач и пых с дебагом

уже собираю

будешь в трейсе сидишь названия функций и номера строк в коде

такое чувство, что всё-таки мне будет проще поставить нормальный php-fpm

выполни backtrace в gdb чтоб увидеть какие вызовы были до того как упало

уже выполнял, толку мало:

(gdb) backtrace
#0  0x00000008058cf008 in zend_execute ()
   from /usr/local/libexec/apache24/libphp5.so
#1  0x00000008058a5c78 in zend_execute_scripts ()
   from /usr/local/libexec/apache24/libphp5.so
#2  0x0000000805939381 in php_ap2_register_hook ()
   from /usr/local/libexec/apache24/libphp5.so
#3  0x000000000044eb17 in ap_invoke_handler ()
#4  0x0000000000462443 in ap_process_async_request ()
#5  0x00000000004624e9 in ap_process_request ()
#6  0x000000000045f481 in ap_expr_yyrealloc ()
#7  0x00000000004586f6 in ap_process_connection ()
#8  0x000000000046a5ee in ap_set_etag ()
#9  0x00000008019464a4 in pthread_create () from /lib/libthr.so.3
#10 0x0000000000000000 in ?? ()

reprimand ★★★★★
() автор топика
Ответ на: комментарий от reprimand

такое чувство, что всё-таки мне будет проще поставить нормальный php-fpm

Зато разберешься как код дебажить при аналогичных проблемах с софтом. Лучше всего сразу выброси апач и переползай на nginx+php-fpm (если, конечно, софт очень сильно не завязан на .htaccess).

iron ★★★★★
()
Ответ на: комментарий от reprimand

Вряд ли вкуривание в backtrace что-то внятное даст, даже с отладочными символами. Вроде valgrind под FreeBSD работает, попробуй им погонять. Но сначала надо найти те входные данных, на которых у тебя php падает.

i-rinat ★★★★★
()
Ответ на: комментарий от iron

Зато разберешься как код дебажить при аналогичных проблемах с софтом.

думается мне, что это будет оочень редко

Лучше всего сразу выброси апач и переползай на nginx+php-fpm

давно хотел, но вся загвоздка в том, что

софт очень сильно завязан на .htaccess

reprimand ★★★★★
() автор топика

linux не предлагать, я его уже натерпелся вдоволь на северах...

И что же у тебя не получилось?

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

И что же у тебя не получилось

долгая и томная история мелких неприятностей
в итоге, конечно, всё получилось

просто freebsd на серваке как-то... проще, что-ли? дело привычки, видимо

reprimand ★★★★★
() автор топика
Ответ на: комментарий от reprimand

перевел всё на php-fpm

Кастани потом, если будешь отписываться по поводу истории успеха, ОК?
В моём хозяйстве сервера на линуксах, но есть в планах по меньшей мере на один водрузить фряху. Как только один проект портирую (in process), так сразу.

Deleted
()
Последнее исправление: rht (всего исправлений: 1)
Ответ на: комментарий от reprimand

freebsd на серваке как-то... проще, что-ли

От меня, бывает, заказчик требует.

Deleted
()
Ответ на: комментарий от Deleted

Кастани потом, если будешь отписываться по поводу истории успеха, ОК?

обязательно
скоро скрин в галерее мб закину... с историей успеха :)

reprimand ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.