CoreDumpDirectory не работает в Ubuntu; ошибка сегментации с php - PullRequest
6 голосов
/ 29 марта 2010

Я пытаюсь устранить ошибку сегментации.Это сообщение появляется в моем файле apache-error.log:

[извещение] child pid 3979 сигнал выхода Ошибка сегментации (11)

Я пытался отключить некоторые apache имодули php, но я все еще получаю ту же ошибку.

Я также пытался поместить это в apache2.conf:

CoreDumpDirectory / tmp / apache2-gdb-dump

, а затем chmod 777, chown www-data ... чтобы сервер мог писать.

Я не вижу файлов дампа памяти, которые бы подсказали мне ошибку.

Кто-нибудь знает, почему CoreDumpDirectory не работает в Ubuntu?

ответы: $ ulimit -a размер основного файла
(блоков, -c) неограниченный размер сегмента данных
(кбайт, -d) неограниченный приоритет планирования (-e) 0 размер файла (блоки, -f) неограниченное количество ожидающих сигналов (-i) 15863 макс. Заблокированной памяти
(кбайт, -l) 32 макс. Объем памяти
(кбайт, -m) неограниченное количество открытых файлов
(-n) 1024 размера канала (512 байт, -p) 8 очередей сообщений POSIX
(байт, -q) 819200 real-timприоритет (-r) 0 размер стека
(килобайт, -s) 8192 процессорное время
(секунд, -t) неограниченное число макс. пользовательских процессов (-u) 15863 виртуальной памяти (килобайт, -v) неограниченное количество блокировок файлов
(-x) неограниченно

Ответы [ 3 ]

11 голосов
/ 30 марта 2010

Я наконец смог увидеть дамп ядра Apache в Ubuntu:

  1. редактировать /etc/default/apport
  2. редактировать apache2.conf:

      CoreDumpDirectory /tmp/apache2-gdb-dump
    
  3. убедитесь, что Apache может написать в него:

    # chmod 777 /tmp/apache2-gdb-dump
    
  4. снять ограничение размера дампа ядра:

    # ulimit -c unlimited
    
  5. При желании измените шаблон имени дампов ядра:

    # echo 'coredump-%e.%p' > /proc/sys/kernel/core_pattern
    

Для анализа дампа используйте gdb:

$ gdb apache2 /tmp/apache2-gdb-dump/coredump-x.x

Чтобы увидеть подробности трассировки стека, в gdb:

gdb> where

Это я сделал и получил дамп ядра. Тем не менее, моя проблема не была решена, глядя на coredump; очевидно, это была проблема в моем PHP-скрипте.

Дополнительная информация: http://matrafox.info/apache-child-pid-exit-signal-segmentation-fault.html

2 голосов
/ 29 марта 2010

Основные дампы отключены в Ubuntu по умолчанию

Попробуйте это:

ulimit -c unlimited

"ulimit -a" говорит вам, каково текущее ограничение (0 означает отключено)

1 голос
/ 15 февраля 2011

Обратите внимание, что подкаталог в / tmp будет удален после перезагрузки, в результате чего apache не запустится из-за ошибок конфигурации.

Во второй ноте, глотание излишне. / tmp - это chmodded 777, так что любой может читать / писать там.

@ arod sudo ulimit -c не работает, потому что -c также является аргументом sudo. Вам нужно sudo -s, затем ulimit -c

...