PHP como un módulo thttpd vs CGI en términos de uso de memoria
Pregunta
Estoy planeando usar php en un entorno integrado. Nuestro servidor web actual es thttpd. Estoy considerando dos opciones ahora: si ejecutarlo como cgi o como módulo SAPI. Sé que cgi tiene ventaja en términos de seguridad. Pero si vamos a usar php como cgi, se debe cargar una instancia de php en la memoria para cada solicitud.
He intentado compilarlo como un módulo SAPI de thttpd y he observado que el uso de la memoria de thttpd, específicamente rss, no aumenta a medida que aumenta el número de solicitudes.
¿Alguien puede explicar cómo carga php thttpd? ¿Se carga solo una vez y permanece residente en la memoria mientras se ejecuta thttpd? Si es así, podemos considerar esto como una alternativa a cgi.
¿Realiza subprocesos múltiples, es decir, si hay varias solicitudes http al mismo tiempo? ¿O se procesa una solicitud a la vez?
¿Existe una buena documentación que discuta el comportamiento de php como un módulo de thttpd?
Solución
No tengo experiencia con thttpd, pero aquí hay algunos consejos:
- el motor de PHP es seguro para subprocesos, pero algunas extensiones no lo son, por lo que las personas generalmente evitan usarlo en un entorno de subprocesos múltiples y prefieren el proceso de una sola solicitud: método de una solicitud.
- sí, por lo general, los módulos de servidor web (como Apache mod_ * stuff) funcionan al permanecer residentes, pero el gran speedbump para PHP es que necesita analizar el archivo de origen (o incluso varios archivos de origen, si usa incluir / requerir) para cada solicitud Puede reducir esto usando algo como APC que almacena en caché la versión analizada de los archivos
- También hay un protocolo llamado FastCGI que tal vez quiera ver. Básicamente, es un cruce entre el módulo y la solución CGI. Combina un par de procesos, cada proceso alberga una única instancia del problema CGI (PHP en este caso) y los utiliza para procesar las solicitudes. Las instancias se reciclan (es decir, pueden procesar varias solicitudes, una después de la otra).