exit signal segmentation fault

I am using Apache/PHP/MySQL stack.
Using as framework CakePHP.

Every now and then I get a blank white page. I can’t debug it through Cake, so I peek in the apache error.log and here’s what I get:

What is this segmentation fault, and how can I fix it?

closed as off topic by Jerry Coffin, codingbadger, Joe, bmargulies, Graviton Oct 15 ’11 at 2:54

Questions on Stack Overflow are expected to relate to programming within the scope defined by the community. Cons >If this question can be reworded to fit the rules in the help center, please edit the question.

3 Answers 3

Attach gdb to one of the httpd child processes and reload or continue working and wait for a crash and then look at the backtrace. Do something like this:

Now attach gdb to one of the child processes, in this case PID 690 (columns are UID, PID, PPID, . )

Wait for crash. then:

Should give you some clue what’s going on. If you file a bug report you should include the backtrace.

If the crash is hard to reproduce it may be a good idea to configure Apache to only use one child processes for handling requests. The config is something like this:

Ошибка в error логе Apache:

Для анализа этой проблемы — нужно включить создание core файлов веб-сервером и произвести их дебаг утилитой gdb

1) Размер coredump файлов.
Чтобы инициировать создание файлов дампов безлимитных размеров размером запустите команду:

Изначально должно быть так:

Нулевой вывод команды означает, что файлы дампов не создаются.

2) Место куда складывать coredump-пы:

3) Разрешаем ядру создавать файл core в файловой системе.

4) В конфиге Apache — httpd.conf добавляем:

5) Дебаг core файла через gdb:

Значится, обратился пользователь со словами:
Невозможно зайти на сайт. Походу, забанили по IP (ххх.ххх.ххх.ххх). Пишу с домашнего по удалёнке, ибо с любого компа в рабочей сетке — ошибка 502 Bad Gateway nginx/x.x.x.
Никакого «бана», разумеется не стоит. Значит надо копать в другом направлении.
Глянул nginx. Там значится:
[ error ] . . upstream prematurely closed connection while reading response header from upstream, client .
Глянул apache. А вот тут совсем стало интересно:
[ notice ] child p >exit signal Segmentation fault ( 11 )
Много. много смертей апача =) Погулил немного. Понравилась идея убрать eAccelerator — потому как древнее это существо. Решил позже воткнуть xCache.
Сам модуль акселератора, конечно же, лежит тут:
/ usr / lib64 / php / modules / eaccelerator.so
Но удалять его не обязательно, потому как главное — чтобы к нему не было обращений, которое, как раз таки, убираем:
mv / etc / php.d / eaccelerator.ini / root /
P.S. Не нужно ничего сразу удалять =) Мало ли.

Посмотрел логи. Вроде, ничего. Подождал, подождал. Опять полезло!
Для верности обновил nginx (1.3.11) и apache (2.2.23) до последней стабильной с CentALT.

Не помогло. Тогда я решил обновить модуль uploadprogress, потому как очень он был старый. Пересобрал. Всё равно ошибка.

Не хотелось, но пришлось ставить отладчик и ковырять через него. Брал информацию от сюда:
http://httpd.apache.org/dev/debugging.html#crashes

На самом деле всё очень просто. Ставим пакет отладчика:
yum install gdb.x86_64
Далее, прописываем в файле настроек апача строчку, которая позволит нам создавать «отчёт» при «умирании дитя» =)
nano / etc / httpd / conf / httpd.conf
Всё равно куда добавьте нужную строчку, я добавил её первой строкой:
CoreDumpDirectory / tmp
После чего перечитываем конфиг апача:

Всё. Теперь запускаем чтение файла логов и ждём пока отвалится процесс:
tail -f / var / log / httpd / error_log
Собственно, должно быть что-то вроде такого:
[ notice ] child p >15774 exit signal Segmentation fault ( 11 ) , possible coredump in / tmp
Это значит, что у нас теперь есть «слепок» падения.
Натравим на него наш отладчик и посмотрим, что там есть:
gdb httpd / tmp / core.xxx ( P >)

Подводим итог:
Не ломайте голову, не тратьте время и не ковыряйте систему просто так. Поставьте отладчик и посмотрите, что именно не так. Это гораздо быстрее и проще, чем пробовать как я все варианты.

Оцените статью