Я пытаюсь решить отказ сегментации. Это сообщение появляется в моем apache-error.log:
[уведомление] дочерний отказ Сегментации сигнала выхода pid 3979 (11)
Я попытался отключить некоторого апача и php модули, но я все еще получаю ту же ошибку.
Я также попытался поместить это в apache2.conf:
CoreDumpDirectory/tmp/apache2-gdb-dump
и затем chmod 777, показанный www-данные... так, чтобы сервер мог записать.
Я не вижу файлов дампа ядра, чтобы дать мне подсказку на ошибке.
У кого-либо есть идея, почему CoreDumpDirectory не работает над Ubuntu?
ответы: $ ulimit-a базовый размер файла
(блоки,-c) неограниченные данные seg размер
(кбайты,-d) неограниченный приоритет планирования (-e) 0 размеров файла (блоки,-f) неограниченные незаконченные сигналы (-i) 15 863 макс. заблокированных памяти
(кбайты,-l) 32 макс. емкости памяти
(кбайты,-m) неограниченные открытые файлы
(-n) 1 024 размера канала (512 байтов,-p) 8 очередей сообщений POSIX
(байты,-q) 819 200 приоритетов в реальном времени (-r) 0 размеров стека
(кбайты,-s) 8 192 процессорного времени
(секунды,-t) неограниченные макс. пользовательские процессы (-u) 15 863 виртуальных памяти (кбайты,-v) неограниченные блокировки файла
неограниченный (-x)
Наконец-то я смог увидеть дамп ядра Apache в Ubuntu:
/ etc / default / apport
изменить apache2.conf:
CoreDumpDirectory / tmp / apache2-gdb-dump {{ 1}}
убедитесь, что Apache может писать в него:
# chmod 777 / tmp / apache2-gdb-dump
удалить ограничение на размер дампа ядра:
# ulimit -c unlimited
При необходимости измените шаблон имени дампов ядра:
# echo 'coredump-% e.% P'> / proc / sys / kernel / core_pattern
Для анализа дампа используйте gdb
:
$ gdb apache2 /tmp/apache2-gdb-dump/coredump-x.x
Чтобы увидеть детали трассировки стека в gdb:
gdb> where
Я сделал это и получил дамп ядра. Однако моей проблемы не было. решена путем просмотра дампа ядра; очевидно, это была проблема в моем скрипте php.
Дополнительная информация: http://matrafox.info/apache-child-pid-exit-signal-segmentation-fault.html
Дампы ядра отключены в Ubuntu по умолчанию
Попробуйте следующее:
ulimit -c unlimited
«ulimit -a» сообщает вам текущий лимит (0 означает отключено)