he estado programando un sitio usando:PHP culpa seg programación
- Zend Framework 1.11.5 (completa MVC)
- PHP 5.3.6
- Apache 2.2.19
- CentOS 5.6 virtuozzo i686 en VPS
- cPanel WHM 11.30.1 (build 4)
- MySQL 5.1.56-log
- API Mysqli 5.1.56
De repente, haciendo unas pocas consultas "MOSTRAR CREAR MESA" a mysql, obtuve esto.
[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
He intentado desactivar eaccelerator sin éxito
[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
La línea problemática es la siguiente: $ fila = $ db-> fetchRow ("SHOW CREATE TABLE 222AFI") ;. Si regreso antes de que se ejecute, todo va bien. $ db es una instancia de Zend_Db_Adapter_Mysqli. La peor parte es que no es determinista. El programa puede pasar algunas veces y otras no. Normalmente NO pasará la línea sin bloquear php.
<?php
class Admin_DbController extends Controller_BaseController
{
/**
*
*/
public function updateSqlDefinitionsAction()
{
$db = Zend_Registry::get('db');
$row = $db->fetchRow("SHOW CREATE TABLE 222AFI");
}
}
?>
no he escrito a [email protected] porque no tengo la https://bugs.php.net/bugs-generating-backtrace.php. Puede ser tonto, pero intenté recompilar Apache con "--enable-debug", (este es un servidor de producción). Sin embargo, "PHP Apache Module: ejecute httpd -X, y acceda al script que bloquea PHP". Es la parte en la que no funciono. El servidor me dice que el puerto 80 ya está en uso.
¿Alguien me puede dar un consejo? Si estoy haciendo algo enojado, ¿al menos algunas otras opciones?
Puedo intentar recompilar Apache a la medianoche, pero sería genial saber que no romperé nada. Cómo ves esto es muy importante para mí.
EDITAR:
llegué a compilar PHP con --enable-debug. Esto es raro, no está fallando como lo haría normalmente. Es difícil, de 20 intentos tal vez uno se cuelga. Y si inicia apache con -X, es aún más difícil que falle php porque httpd tarda demasiado en responder.
Edit2:
Incluso si es después de 20 intentos, puedo hacerlo chocar si comienzo httpd sin bandera -X. Sin embargo, emulé un script que inicializa las variables $ _SERVER para hacer que Zend crea que se está llamando a través de un navegador. Cuando ejecuto este script con "php crash.php" muchas veces (como 50) todo va normal. Estoy empezando a creer que tiene algo que ver con los procesos reutilizados de php. Estoy corriendo Apache con mod_fcgi y:
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"
" el servidor me la dice el puerto 80 ya está siendo utilizado ". Mata el proceso 'httpd' existente primero. Esto significa detener el servicio Apache, si lo tiene configurado para ejecutarse como un servicio. –
Y probablemente en este caso, el contenedor FCGI debe volcar la traza inversa. – hakre
Supongo que hay una manera de excluir archivos de la caché/optcoded. ¿Por qué no hacer eso hasta que encuentre una solución más permanente? –