GNU/Linux >> Tutoriales Linux >  >> Linux

PHP y mod_fcgid:ap_pass_brigade falló en la función handle_request_ipc

También tengo el mismo problema hace aproximadamente un año. Probé muchas cosas y, por último, realicé algunas de las cosas de golpe y ejecución después de leer la documentación y mi problema desapareció. Primero, las cosas importantes requeridas para establecerse como:

FcgidBusyTimeout     300 [default]
FcgidBusyScanInterval    120 [default]

El propósito de esta directiva es finalizar aplicaciones colgadas . Es posible que sea necesario aumentar el tiempo de espera predeterminado para las aplicaciones que pueden tardar más en procesar la solicitud. Porque la verificación se realiza en el intervalo definido por FcgidBusyScanInterval , se puede permitir que el manejo de solicitudes continúe por un período de tiempo más largo

FcgidProcessLifeTime     3600 [default]

Los procesos de aplicación inactivos que han existido durante más tiempo que este serán terminados, si el número de procesos para la clase excede FcgidMinProcessesPerClass .

Esta verificación de la vida útil del proceso se realiza con la frecuencia del FcgidIdleScanInterval configurado .

FcgidZombieScanInterval   3 [seconds default]

El módulo busca aplicaciones FastCGI cerradas en este intervalo. Durante este período de tiempo, la aplicación puede existir en la tabla de procesos como un zombi (en Unix).

Nota:todas las opciones anteriores disminuyen o aumentan según el tiempo o las necesidades del proceso de solicitud o se aplican a un host virtual específico.

Pero mi problema se resuelve con esta opción:

Las opciones anteriores han modificado mi servidor, pero después de un tiempo los errores parecen volver a aparecer, pero el error realmente se resuelve con esto:

 FcgidOutputBufferSize   65536 [default]

Lo he cambiado a

 FcgidOutputBufferSize   0

Esta es la cantidad máxima de datos de respuesta que el módulo leerá de la aplicación FastCGI antes de enviar los datos al cliente. Esto vaciará los datos al instante sin esperar a tener 64 KB de bytes, lo que realmente me ayuda a vaciar el proceso más rápido.

Otros problemas que tengo

si el error 500 proviene del tiempo de espera de Nginx. La solución:

/etc/nginx/nginx.conf

keepalive_timeout  125;
proxy_read_timeout 125;
proxy_connect_timeout 125;
fastcgi_read_timeout 125;

De forma intermitente obtenía el error MySQL "El servidor MySQL se ha ido", lo que requería una modificación más:/etc/my.conf

wait_timeout = 120

Luego, solo por diversión, seguí adelante y aumenté mi límite de memoria PHP, por si acaso:/etc/php.ini

memory_limit = 256M

Uso de SuExec

mod_fastcgi no funciona en absoluto bajo SuExec el Apache 2.x . No tuve más que problemas con eso (también tuvo muchos otros problemas en nuestras pruebas). La verdadera causa de su problema es SuExec

En mi caso, fue un inicio para mí, inicié Apache, mod_fcgid genera exactamente 5 procesos para cada vhost. Ahora, cuando se usa un script de carga simple y se envía un archivo de más de 4-8 KB, todos esos procesos secundarios se eliminan a la vez para el host virtual en el que se ejecutó el script.

Podría ser posible hacer una compilación de depuración o aumentar el registro en mod_fcgid, lo que podría dar una pista.

Mientras tanto, probé mod_fastcgi durante 1 año y también puedo decir con muchos otros que SuExec no es más que problemático y no funciona del todo bien, en todos los casos.


La advertencia no tiene nada que ver con ninguno de los Fcgidxxx opciones y simplemente se debe a que el cliente cierra su lado de la conexión antes de que el servidor tenga la oportunidad de responder.

De la fuente real:

/* Now pass any remaining response body data to output filters */
if ((rv = ap_pass_brigade(r->output_filters, brigade_stdout)) != APR_SUCCESS) {
    if (!APR_STATUS_IS_ECONNABORTED(rv)) {
        ap_log_rerror(APLOG_MARK, APLOG_WARNING, rv, r,
                      "mod_fcgid: ap_pass_brigade failed in "
                      "handle_request_ipc function");
    }

    return HTTP_INTERNAL_SERVER_ERROR;
}

El crédito es para el Blog de Avian que se enteró.


Linux
  1. Cómo encontrar y matar el proceso Zombie en Linux

  2. ¿Obtener tiempo de usuario y kernel de un proceso en ejecución?

  3. ¿Diferencias entre la palabra reservada y el comando 'tiempo' en el shell integrado, la función, la canalización y la lista de comandos?

  4. ¿Hora de inicio del proceso con zona horaria?

  5. Configure Apache y Php con mod_fcgid en Ubuntu/Debian

Servidor NTP y mejores prácticas

Cómo configurar la fecha y la hora en Linux

Procesos de Linux:diseño de memoria, salida y funciones C _exit

Obtener la hora actual en horas y minutos

Pérdida de tiempo de execv() y fork()

Ejecutando phpmyadmin y suphp