Saya menggunakan stack Apache / PHP / MySQL.
Menggunakan sebagai framework CakePHP.
Sesekali saya mendapatkan halaman putih kosong. Saya tidak bisa men-debugnya melalui Cake, jadi saya mengintip di apache error.log dan inilah yang saya dapatkan:
[Wed Oct 12 15:27:23 2011] [notice] child pid 3580 exit signal Segmentation fault (11)
[Wed Oct 12 15:27:34 2011] [notice] child pid 3581 exit signal Segmentation fault (11)
[Wed Oct 12 15:30:52 2011] [notice] child pid 3549 exit signal Segmentation fault (11)
[Wed Oct 12 16:04:27 2011] [notice] child pid 3579 exit signal Segmentation fault (11)
zend_mm_heap corrupted
[Wed Oct 12 16:26:24 2011] [notice] child pid 3625 exit signal Segmentation fault (11)
[Wed Oct 12 17:57:24 2011] [notice] child pid 3577 exit signal Segmentation fault (11)
[Wed Oct 12 17:58:54 2011] [notice] child pid 3550 exit signal Segmentation fault (11)
[Wed Oct 12 17:59:52 2011] [notice] child pid 3578 exit signal Segmentation fault (11)
[Wed Oct 12 18:01:38 2011] [notice] child pid 3683 exit signal Segmentation fault (11)
[Wed Oct 12 22:20:53 2011] [notice] child pid 3778 exit signal Segmentation fault (11)
[Wed Oct 12 22:29:51 2011] [notice] child pid 3777 exit signal Segmentation fault (11)
[Wed Oct 12 22:33:42 2011] [notice] child pid 3774 exit signal Segmentation fault (11)
Apa kesalahan segmentasi ini, dan bagaimana cara memperbaikinya?
MEMPERBARUI:
PHP Version 5.3.4, OSX local development
Server version: Apache/2.2.17 (Unix)
CakePhp: 1.3.10
php
apache
cakephp
error-logging
mgPePe
sumber
sumber
Jawaban:
Lampirkan gdb ke salah satu proses anak httpd dan muat ulang atau lanjutkan bekerja dan tunggu kerusakan lalu lihat lacak balik. Lakukan sesuatu seperti ini:
...
Sekarang lampirkan gdb ke salah satu proses anak, dalam hal ini PID 690 (kolom adalah UID, PID, PPID, ...)
Tunggu crash ... lalu:
Atau
Harus memberi Anda petunjuk apa yang terjadi. Jika Anda mengajukan laporan bug, Anda harus menyertakan backtrace.
Jika crash sulit untuk direproduksi, mungkin ide yang baik untuk mengkonfigurasi Apache agar hanya menggunakan satu proses anak untuk menangani permintaan. Config-nya adalah seperti ini:
sumber
dmesg
pid dari proses segfault.Unable to access task for process-id 70: (os/kern) failure.
set follow-fork-mode child
dan kemudian lampirkan ke proses induk (yang memunculkan proses anak) -> stackoverflow.com/questions/15126925/…Kesalahan segementasi adalah kesalahan internal di php (atau, kemungkinan kecil, apache). Seringkali, kesalahan segmentasi disebabkan oleh salah satu modul php yang lebih baru dan kurang teruji seperti imagemagick atau subversion.
Coba nonaktifkan semua modul yang tidak penting (dalam format
php.ini
), lalu aktifkan kembali satu per satu hingga kesalahan terjadi. Anda mungkin juga ingin memperbarui php dan apache.Jika itu tidak membantu, Anda harus melaporkan bug php .
sumber
mod-geoip
- saya sekarang menggunakan ekstensi geoip php sebagai gantinyamod-geoip
). Apakah masalahnya terus berlanjut? Kemudian nonaktifkan lagi. Tidak melihat segfault lagi? Aktifkan lebih banyak modul sampai Anda melakukannya. Jika Anda secara teknis cenderung dan memiliki debugger, lihat jawaban bagus @Mathias Wadmann. Ketahuilah bahwa debugger dapat menyesatkan Anda - terkadang error dapat terjadi di modul lain.Sudahkah Anda mencoba meningkatkan output_buffering di php.ini Anda?
Apa artinya "zend_mm_heap corrupt" ?
sumber
output_buffering = 4096
dan sekarang halaman berfungsi lagi. Thxoutput_buffering = 8192
bekerja. Terima kasih banyak!output_buffering = 8192
menyebabkan segfault, yang telah diperbaiki dengan pengaturanoutput_buffering = Off
. Saya sangat bingung.