Tras seleccionar la plantilla "phpfcgid" para el servicio web VestaCP , un gran número de procesos PHP-CGI agotaron rápidamente la memoria.
- Básicamente me quedé sin memoria durante unas horas después de reiniciar el servidor.
- El proceso PHP-CGI previamente inactivo no se elimina y un proceso ejecuta casi 1 subprocesos, consumiendo al menos 20M de memoria.
Usado en SSH htop comando (requiere instalación), puede ver este estado ▼

Si recibe un mensaje de error "-bash: htop: comando no encontrado" cuando usa el comando htop, consulte este tutorial para encontrar la solución ▼
La gran cantidad de procesos PHP-CGI provocó que la memoria se agotara rápidamente. El problema radica en que VestaCP utiliza una configuración no optimizada en la plantilla phpfcgid de CentOS .
- VestaCP en la plantilla phpfcgid, configure 1 proceso PHP-CGI para ejecutar hasta 20 procesos secundarios.
请 参阅 /usr/local/vesta/data/templates/web/httpd/phpfcgid.sh Línea 13 del archivo:
export PHP_FCGI_CHILDREN=20
Sin embargo, tal configuración viola la advertencia de Apache en la documentación de administración de subprocesos de PHP:
La gestión de procesos secundarios de PHP ( PHP_FCGI_CHILDREN ) siempre debe estar deshabilitada con mod_fcgid, que solo enrutará una solicitud a la vez a los procesos de la aplicación que haya generado; por lo tanto, los procesos secundarios creados por PHP no se utilizarán de forma efectiva. (Además, es posible que los procesos secundarios de PHP no se terminen correctamente). Por defecto, y con la variable de entorno configurada como PHP_FCGI_CHILDREN=0 , la gestión de procesos secundarios de PHP está deshabilitada.
Debido a que en el módulo mod_fcgid de Apache, el proceso PHP-CGI solo puede responder a una solicitud y ejecutarse a la vez, el proceso secundario PHP-CGI es muy ineficiente.
Por lo tanto, la configuración para la gestión de subprocesos de PHP debe desactivarse directamente ▼
PHP_FCGI_CHILDREN=0
Al mismo tiempo, si ya tiene un host virtual generado, debe modificar los archivos de configuración de todos los sitios web ▼
/home/用户名/web/域名/cgi-bin/fcgi-starter
Después de abrir el archivo de configuración de fcgi-starter, inserte lo siguiente ▼
export PHP_FCGI_CHILDREN=20
Modificado a ▼
export PHP_FCGI_CHILDREN=0
- Después de la modificación, la gestión de subprocesos de PHP se desactivará en el modo mod_fcgid.
- El proceso PHP-CGI ya no generará procesos secundarios, lo que puede ahorrar mucha memoria.
Además, VestaCP no establece un mecanismo de finalización para los procesos inactivos:
- Todos los procesos PHP-CGI recién ejecutados seguirán utilizando la memoria hasta que se reinicie el sistema.
Para solucionar esto, simplemente agregue el archivo de configuración mod_fcgid /etc/httpd/conf.d/fcgid.conf Agregue la siguiente configuración en ▼
FcgidIdleTimeout 120
- Configure Apache para eliminar automáticamente los procesos PHP-CGI que estén inactivos durante 2 minutos (120 segundos).
Una vez completada la configuración, reinicie el servicio Apache ▼
service httpd restart
Después de reiniciar el servicio, ya no se mostrarán los cientos de procesos PHP-CGI que se mostraban anteriormente en HTOP.
Normalmente, un único proceso PHP-CGI para un único usuario de Vesta CP consume entre 30 y 40 MB de memoria, lo cual es más que suficiente para un host Linux .
Por lo tanto, optimizar la configuración del contenido y las plantillas de Vesta es crucial para los profesionales del marketing online que desean destacar en SEO .
Puedes echar un vistazo a los siguientes tutoriales en el panel de VestaCP ▼
Esperamos que el artículo "Optimización de la configuración de la plantilla phpfcgid de VestaCP para el error 'Multiple Processes, Memory Exhaustion 500 Error'", compartido en el blog de Chen Weiliang ( https://www.chenweiliang.com/ ), le sea útil.
No dudes en compartir el enlace de este artículo: https://www.chenweiliang.com/cwl-735.html



