2010-03-28 9 views
6

Próbuję rozwiązać błąd segmentacji. Komunikat ten pojawia się w moim apache-error.log:CoreDumpDirectory nie działa na Ubuntu; uzyskanie błędu segmentacji za pomocą php

[Ogłoszenie] pid dziecko 3979 wyjście sygnału błędu Segmentacja (11)

Próbowałem wyłączenie niektórych modułów Apache i PHP, ale I” m wciąż otrzymuje ten sam błąd.

Próbowałem zostały również umieszczenie tego w apache2.conf:

CoreDumpDirectory/tmp/apache2-gdb-dump

a następnie chmod 777 chown www-data ... tak że serwer może pisać.

Nie widzę plików zrzutu pamięci, aby dać mi wskazówkę dotyczącą błędu.

Czy ktoś ma pomysł, dlaczego CoreDumpDirectory nie działa w systemie Ubuntu?

odpowiedzi: $ ulimit -a rdzeń rozmiar pliku
(bloki, -c) wielkość SEG nieograniczony dane
(KB, -d) nieograniczony szeregowanie priorytet (-e) 0 Rozmiar pliku (bloki -F) nieograniczony sygnał oczekujące (-i) 15863 maks zamknięty pamięci
(KB, -l) 32 maksymalny rozmiar pamięci
(KB, -m) nieograniczony otwarte pliki
(N) 1024 wielkość rury (512 bajtów, -p) 8 kolejek wiadomości POSIX
(bajty, -Q) 819200 czasie rzeczywistym priorytet (R) 0 stos wielkości
(KB, E), 8192 czasu procesora
(sekundy, t) Jest nieograniczona maks przetwarza (-u) 15863 pamięci wirtualnej (kilobajtów, -v) nieograniczone blokady plików
(-x) nieograniczony

Odpowiedz

11

I w końcu udało mi się zobaczyć zrzutu Apache w Ubuntu:

  1. zmienił /etc/default/apport
  2. edytuj apache2.conf:

    CoreDumpDirectory /tmp/apache2-gdb-dump 
    
  3. upewnij Apache można napisać do niego:

    # chmod 777 /tmp/apache2-gdb-dump 
    
  4. usuń limitu rdzeń rozmiar zrzutu:

    # ulimit -c unlimited 
    
  5. Opcjonalnie zmień nazwę wzór wysypisk podstawowych :

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

celu analizy korzystania zrzutu gdb:

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

aby zobaczyć szczegóły StackTrace w gdb:

gdb> where 

To ja, a ja uzyskaliśmy rdzeń-dump. Jednak mój problem nie został rozwiązany przez patrzenie na coredump; to był najwyraźniej problem w moim skrypcie php.

Więcej informacji: http://matrafox.info/apache-child-pid-exit-signal-segmentation-fault.html

+0

musisz 'sudo mkdir/tmp/apache2-gdb- dump' before chmod/chown it. –

+3

Co zmieniłeś w/etc/default/apport? –

+1

@MarkTheunissen Wierzę, że zmiana enabled = 0 na enabled = 1 – arod

2

wysypisk rdzeniowe są wyłączone na Ubuntu domyślnie

Spróbuj tego:

ulimit -c unlimited 

"ulimit -a" mówi, co jest ograniczenie prądu (0 oznacza wyłączony)

+0

nie wydaje się robić nic > $ ulimit -c unlimited > $ // nic się nie dzieje > $ sudo ulimit -c unlimited > sudo: ulimit : nie znaleziono polecenia > $ człowiek uLimit nie ręczne wprowadzanie do ulimit > sudo apt szukać uLimit p cpulimit - ogranicza zużycie procesora procesu (??) – arod

1

Należy pamiętać, że w podkatalogu/tmp zostanie usunięty po ponownym uruchomieniu komputera, powodując apache, aby nie rozpocząć z powodu błędów konfiguracyjnych.

Po drugiej nucie kurwenie jest niepotrzebne./tmp jest chmodded 777, aby każdy mógł tam czytać/pisać.

@arod sudo ulimit -c nie działa, ponieważ -c jest również argumentem sudo. Trzeba sudo -s, następnie ulimit -c

Powiązane problemy