Postępowałem zgodnie z instrukcjami z wielu lokalizacji w Internecie, jak uzyskać zrzut pamięci z Apache, gdy produkuje on segfault, ale nadal nie chce wygenerować zrzutu.
Mam:
- Dodano
CoreDumpDirectory
dyrektywę dohttpd.conf
pliku i ustaw ją na/tmp
- Wykonany
ulimit -c unlimited
- Podano wzór dla zrzutów przy użyciu
echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
- Również pobiegłem
echo 0 > /proc/sys/kernel/core_uses_pid
Httpd został zrestartowany, ale nadal nie utworzono żadnych zrzutów.
Używam CentOS 5.8 x64 z httpd-2.2.3-65.el5.centos.3
iphp-5.3.20-13.el5.art
Każda pomoc będzie mile widziana!
httpd
segmentation-fault
dump
chrismcb
źródło
źródło
CoreDumpDirectory
się/tmp/dumps
i rzucił do/tmp
... teraz na debugowaniaOdpowiedzi:
Moja odpowiedź brzmi:
Skonfiguruj dyrektywę w następujący sposób
CoreDumpDirectory /tmp/mycoredump
Utwórz katalog:
mkdir -p /tmp/mycoredump
Przypisywanie własności do katalogu www-data lub httpd
chown -R www-data:www-data /tmp/mycoredump
Ustaw uprawnienia na:
chmod 777 /tmp/mycoredump
Uruchom ponownie Apache:
service apache2 restart
źródło
/tmp
!chmod 777
cokolwiekZauważ, że jeśli
PrivateTmp=true
ustawiłeś w swoim/usr/lib/systemd/system/apache2.service
(lub jakkolwiek to się nazywa w twoim systemie), co oznacza, że Apache faktycznie szuka/tmp
wewnątrz czegoś takiego/tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/
, Apache nie będzie mógł pisać do tego katalogu i nie zostanie w ogóle zrzucony rdzeń (z powodu dosystemd
katalogu tmp mającego 700 uprawnień tylko do rootowania).Rozwiązaniem jest ustawienie
PrivateTmp=false
lub zmodyfikowanie uprawnień do katalogu systemd tmp po uruchomieniu serwera.Zmarnowałem na to godziny, by dopiero teraz wreszcie zrozumieć, na czym polega problem.
źródło