Apache2 con PHP-FPM -- Cómo me afecta pm.process_idle_timeout y php_fpm_idle_timeout (-idle-timeout)


#1

1. Introducción

El siguiente artículo explica la relación entre estas dos variables de configuración de idle timeout pero que operan en ámbitos distintos (una dentro del motor php-fpm y otra dentro de apache2).

Resumiendo, de manera general, usarás la declaración php_fpm_idle_timeout dentro de las opciones del sitio web, o usando la declaración manual -idle-timeout dentro de la directiva FastCgiExternalServer.

2. Sobre la opción pm.process_idle_timeout

Esta opción afecta al idle interno del propio proceso php-fpm.

Este idle se activa cuando el propio proceso php fpm no está haciendo nada.

En este caso, si se está procesando una base de datos, vía phpmyadmin, esta opción no nos ayudará ya que no se activará: en efecto, el proceso php está activo y procesando.

Por tanto, el idle no se activará.

3. Opción Core-Admin #WebhostingManagement php_fpm_idle_timeout

Esta opción es independiente a la anterior y opera dentro del apache2

Esta opción configura el idle timeout percibido por parte del apache2 sobre la actividad del php-fpm.

De ahí que diga:

4. Comparativa de ambas opciones

[ Apache2 ] -- (activa timeout vía  php_fpm_idel_time :  
                        -idle-timeout,  dentro de  FastCgiExternalServer ):

       --> [php-fpm master] 
 
              --> [php-fpm child] ( pm.process_idle_timeout:  se activa si este child no 
                                    hace nada durante los segundos indicados)

5. Ignorar [pm.process_idle_timeout] usar [php_fpm_idle_timeout] (o FactCgiExternalServer)

La opción que tenemos que usar es php_fpm_idle_timeout (a través de las opciones de core-admin).

Alternativamente, se puede usar la declaración manual (-idle-timeout) dentro de la declaración FactCgiExternalServer del sitio afectado si no está bajo core-admin:

# Default PHP FPM pool for www-data user
FastCgiExternalServer /usr/lib/cgi-bin/core-admin-php-fpm-default-9999-8443-fcgi -idle-timeout 36000 -socket /var/run/core-admin-php-default-fpm-001-mysql.sock -pass-header Authorization

6. Cómo resolver este caso de timeout en el phpmyadmin para instalaciones con motor php-fpm

Hay que editar el fichero /etc/apache2/sites-enabled/001-mysql.conf para añadir manualmente la declaración -idle-timeout 36000:

Así, la declaración completa quedaría como sigue:

# Default PHP FPM pool for www-data
FastCgiExternalServer /usr/lib/cgi-bin/core-admin-php-fpm-default-9999-8443-fcgi -idle-timeout 36000 -socket /var/run/core-admin-php-default-fpm-001-mysql.sock -pass-header Authorization

Tras esto, reiniciar:

>> /etc/init.d/apache2 restart

No hace falta reiniciar el php-fpm ya que es una opción que opera a nivel Apache2

NOTA: También hay que ajustar el max_execution_time del php para que esté alineado con este valor. De lo contrario fallá con errores extraños.

7. Actualización de Core-Admin para PhpMyAdmin

Core-Admin ya viene actualizado para que las instalaciones nuevas dejen el phpmyadmin con la opción de -idle-timeout a 36000 (10 horas).

De sobra para cualquier importado de base de datos grandes.