Ошибка сегмента программирования PHP

Я программировал сайт, используя:

  1. Zend Framework 1.11.5 (полный MVC)
  2. PHP 5.3.6
  3. Apache 2.2.19
  4. CentOS 5.6 i686 virtuozzo на vps
  5. cPanel WHM 11.30.1 (сборка 4)
  6. Mysql 5.1.56-log
  7. Mysqli API 5.1.56

Неожиданно выполняя несколько запросов «SHOW CREATE TABLE» к mysql, Я получил это.

[Wed Jul 20 17:35:23 2011
] [notice] EACCELERATOR(5827): PHP crashed on opline 138 of fetch_fields() at /usr/lib/php/Zend/Db/Statement/Mysqli.php:235

Я безуспешно пытался отключить eaccelerator

[Wed Jul 20 17:45:34 2011] [warn] [client 190.78.208.30] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Wed Jul 20 17:45:34 2011] [error] [client 190.78.208.30] Premature end of script headers: index.php
[Wed Jul 20 17:45:34 2011] [error] mod_fcgid: process /usr/local/cpanel/cgi-sys/php5(11562) exit(communication error), get unexpected signal 11
[Wed Jul 20 17:45:34 2011] [warn] [client 190.78.208.30] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Wed Jul 20 17:45:34 2011] [error] [client 190.78.208.30] Premature end of script headers: index.php

Проблемная строка следующая: $ row = $ db-> fetchRow ("SHOW CREATE TABLE 222AFI") ;. Если я вернусь до его выполнения, все будет хорошо. $ db - это экземпляр Zend_Db_Adapter_Mysqli. Хуже всего то, что он не детерминирован. Программа может проходить несколько раз, а некоторые нет. Обычно он НЕ передает строку без сбоя php.

fetchRow("SHOW CREATE TABLE 222AFI");
    }
}
?>

Я не писал (скрыто), потому что у меня нет https://bugs.php.net/bugs-generating-backtrace.php . Это может показаться глупым, но я попытался перекомпилировать apache с помощью "--enable-debug" (это рабочий сервер). Однако «PHP Apache Module: запустите httpd -X и получите доступ к сценарию, который приводит к сбою PHP» - это часть, с которой я не могу работать. Сервер сообщает мне, что порт 80 уже используется.

Кто-нибудь может дать мне совет? Если я делаю что-то безумное, по крайней мере, какие-то другие варианты?

Я могу попробовать перекомпилировать apache в полночь, но было бы здорово знать, что я ничего не сломаю. Для меня очень важно то, как вы это видите.

EDIT :

Мне нужно скомпилировать php с помощью --enable-debug. Это странно, он не вылетает, как обычно. Это сложно, из 20 попыток может одна вылетит. И если запустить apache с -X, это еще больше затруднит сбой php, потому что httpd слишком долго отвечает.

EDIT2 :

Даже если это после 20 попыток, я могу вызвать сбой, если я запустил httpd без флага -X. Однако я эмулировал сценарий, который инициализирует переменные $ _SERVER, чтобы Zend поверил, что он вызывается через браузер. Когда я выполняю этот скрипт с "php crash.php" много раз (например, 50), все идет нормально. Я начинаю верить, что это как-то связано с повторно используемыми процессами php. Я запускаю apache с mod_fcgi и:

Server version: Apache/2.2.19 (Unix)
Server built:   Jul 20 2011 19:18:58
Cpanel::Easy::Apache v3.4.2 rev9999
Server's Module Magic Number: 20051115:28
Server loaded:  APR 1.4.5, APR-Util 1.3.12
Compiled using: APR 1.4.5, APR-Util 1.3.12
Architecture:   32-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/apache"
 -D SUEXEC_BIN="/usr/local/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

6
задан Andras Gyomrey 21 July 2011 в 01:01
поделиться