|
|
Cache de código PHP compilado en memoria: APC
(20250 lectures)
Por Ricardo Galli Granada
gallir
(http://mnm.uib.es/gallir/)
Creado el 06/05/2001 20:26 modificado el 06/05/2001 20:26
|
Los programadores de PHP saben que es muy rápido, pero que en servidores que
estén muy cargados (centenar de conexiones por segundo), el hecho que se tenga
que recompilar cada vez hace que el ordenador se sobrecargue. El APC es un
sistema de cache de código compilado que evita recompilar el código PHP
por cada conexión permitiendo muchos mejores tiempos de respuesta (hasta un 400%) y cargas muy superiores. En los últimos días, cuando instalé dicho sistema en
Bulma, le encontré algunos bugs y bastantes ineficiencias, por lo que me puse a
modificarlo y probarlo en Bulma. Como ha mejorado mucho con respecto al original
ya envié patches a los autores originales y he abierto mi propia
rama de desarrollo para seguir mejorando el código. Os invito a probarlo y
ayudar en el desarrollo.
[Actualizado]: benchmarks a Bulma
| Pagina1/1 |
Actualización
Hice unos benchmarks a bulma.net probando la página índice
con y
sin el sistema de cache APC activado. También probé el acceso a un artículo individual
con y
sin el sistema de cache.
Para las pruebas usé el ApacheBenchmark, con 10 conexiones simultáneas y durante 10 segundos.
Esta implementación tiene una técnica que implementé para permitir el acceso de varios lectores pero un sólo escritor a las regiones críticas de la memoria compartida.
La conclusión rápida es que el PostgreSQL (7.1) es muy, pero que muy malo, malísimo para las consultas simultáneas. Aunque también debo decir que podríamos mejorar un poco las consultas SQL.
Aquí teneís una tabla con los resultados comparativos, incluí una script PHP muy sencillo para ver la mejora de las técnicas nuevas de semáforos. Los resultados de la fila "Postgres" son los accesos a artículos individuales de Bulma. Los números para la página índice son aún peores...
CONCLUSIONS
Requests per Seconds
| New Semaphores | Flock | Diff
-------------------------------------------------
Simple PHP: | 254.35 | 226.25 | 12.4%
Postgres: | 14.85 | 13.94 | 6.52%
-------------------------------------------------
| New semaphores | No cache | Diff
-------------------------------------------------
Simple PHP: | 254.35 | 218.59 | 16.4%
Postgres: | 13.94 | 11.36 | 22.7%
Introducción
La empresa Zend, que ha desarrollado
bastantes módulos del PHP4, también ofrece un producto
comercial para hacer cache de páginas compiladas, pero es un producto
cerrado y muy caro.
La gente de Community
Connect se ha dedicado a desarrollar un producto alternativo llamado Alternative
PHP Cache. Este sistema es e código abierto y con la misma licencia del
PHP4 (Q Public License).
Trabaja con dos métodos distintos: memoria compartida y mmap de
ficheros. Cada una tiene sus ventajas y desventajas, pero a mi me gusta más el
sistema con memoria compartida.
Como le he encontrado algunos bugs y problemas de ineficiencia, como además
la necesidad de agregar algunas características , he creado mi propia
versión con esos problemas solucionados y estoy enviando
parches a los desarrolladores principales. Al momento de escribir este
artículos, parece que iban a integrar todos en la versión "oficial".
Por supuesto, estáis invitados a probarlo y ayudarme en el desarrollo.
El Software y Configuración
El sistema es muy sencillo de instalar y configurar:
- Poner el ejecutable (php_apc.so) en el directorio de extensiones del PHP4.
- Indicar en el php.ini que se cargue dicho módulo:
- Indicar las parámetros necesarios o deseados en el mismo fichero.
- Rearrancar el Apache.
En el caso de Bulma, la configuración es la siguiente:
zend_extension="/usr/local/lib/php/extensions/php_apc.so"
apc.relative_includes=1
apc.check_mtime=1
apc.shm_segment_size=2097152 ; 2 MB
apc.idle=900 ; removed from cache if idle for 15 minutes
apc.hash_buckets=256
En mi página del APC,
podéis bajar el ejecutable en forma de de librería compartida para cargar como
módulo del PHP, también podéis bajar los fuentes, ver las modificaciones en
el repositorio del CVS y las configuraciones en el php.ini que usamos
para Bulma.
Y para ver como se comporta, también hay un pequeño script
que os muestra el estado de los objetos en el cache del servidor.
Modificaciones Realizadas
Cuando lo empecé a probar en Bulma, noté que tenia algunos problemas y que
le vendrían bien algunas características adicionales:
- Descargar del cache los objetos que no han sido accedidos durante un
periodo determinado de tiempo: idle time (IMPLEMENTADO).
Esto ahorraría memoria que se gasta en tener en cache páginas que
prácticamente no se acceden y que nunca se descargan de memoria. Se podía
solucionar con el ttl, pero también afecta a aquellas páginas que
son accedidas frecuentemente, obligando a recompilarlas cada vez.
- Optimizar el control de fechas de modificación de los ficheros PHP
originales: mtime_ttl (IMPLEMENTADO).
He notado, como también lo dice el FAQ que esto afecta al rendimiento, que
además de ser cierto, por una ineficiencia de la generación de las claves
para el hashing, también se sufría la ineficiencia aunque no es
esté controlando la fecha. Para ello he modificado las funciones de
verificación de modificación para que lo haga cada vez que haya pasado un
tiempo configurable en segundos, haciendo que ahora no se note en absoluto
en el rendimiento.
- Optimización de le función de generación de claves (IMPLEMENTADO).
La función que genera las claves de los ficheros PHP era muy ineficiente
debido a que hacía un stat para verificar la existencia del fichero
en cada uno de los directorios de includes del PHP. He cambiado
radicalmente dicha función y ahora ni siquiera hace uso de la llamada de
sistema stat.
- Un bug del Linux hace que se dejase segmentos de memoria compartida sin
utilizar (IMPLEMENTADO).
- Implementación de un algoritmo de CLOCK para el reemplazo de objetos,
similar a la técnicas usadas en los sistemas operativos como aproximación
al algoritmo LRU (en DESARROLLO).
|
|
|
|
|
|
Comentarios Es posible que se hayan omitido algunos comentarios considerados poco constructivos
| 1. Re:Cache de código PHP compilado en memoria: APC (08/05/2001 10:25, #1163) Por: DaniRC |
y si postgres es tan mala malisima porque no pasamos a MySQL. Ya se que me lo has explicado 50 veces ... pero sigo sin entenderlo ¿?
Nota: aunque para resultados malos malisimos .. acercate al odbc de MS Access! XD | No es pot respondre |
2. Re:Cache de código PHP compilado en memoria: APC (08/05/2001 10:29, #1164) Por: gallir (http://m3d.uib.es/~gallir/) |
Yo _si_ quiero pasar a MySQL, pero da una mucha pereza exportar todos los datos y modificar los scripts...
También pensaba que con la 7.1, que decían que mejoraba mucho el rendimiento, pero evidentemente no para Bulma.
--ricardo | No es pot respondre |
3. Re:Cache de código PHP compilado en memoria: APC (28/05/2001 14:57, #1440) Por: El cobarde anonimo |
Hola, soy el mismo de la otra seccion X-))) , y mi pregunta es... Que puede hacerse para mejorar la respuesta de PostgreSQL cuando hay muchas conexiones concurrentes, con el tgz se pueden poner mas de 32 conx. simul.? Yo le doy a Perl / DBI , pero supongo que en definitiva hablamos de lo mismo.
Un saludo de nuevo. | No es pot respondre |
4. Re:Cache de código PHP compilado en memoria: APC (28/05/2001 15:14, #1442) Por: gallir (http://m3d.uib.es/~gallir/) |
Ya pondré un artículo sobre estos temas, pero fijaros en estos mensajes:
http://bulma.lug.net/pipermail/bulmailing/2001-May/002420.html
Allí hago un resumen de cuál era el problema de configuración Apache/Postgres.
--ricardo | No es pot respondre |
5. Re: Cache de código PHP compilado en memoria: APC (04/04/2002 01:54, #5545) Por: Vhackero |
| Hola, mira esto que te comentare brevemente tal vez te matara de risa, pero bueno, soy estudiante de Maestria en la Universidad Autonoma de Tlaxcala, y para este 5 de abril tendre que presentar mi Propuesta final de Tesis (ya hice una anteriormente)y me meti en esta bronca "TRATAR VULNERABILIDADES DE PHP SOBRE SERVIDORES APACHE DE LINUX" (segun yo ese sera mi proyecto) y digo bronca por que he buscao en la red y existe gente (como tu) trabajando en esto y no se si esto sea meritorio de un proyecto de maestria...
bueno te escribo esto por que me gustaria saber que piensas (o piensa cualquiera que lea esto) si tienes una mejor propuesta (por supuesto si puedes ayudarme).
Espero no molestarte, ojala contestes(n)...
Gracias. | No es pot respondre |
6. Re: Cache de código PHP compilado en memoria: APC (25/07/2002 17:24, #7416) Por: Paulo Cesar |
| Tengo un problema que no se como solucionarlo y tiene algo que ver con el anterior articulo..
Lo que pasa es que necesito manejar la concurrencia en la BD postgresql 7.2, pero lo necesito manejar a nivel de programacion (PHP), pues a nivel de la directo de la BD lo pude hacer ..
Lo que necesito es Bloquear el registro que seleccione en un momento dado para ser modificado o para ser eliminado.. pero necesito que lo bloque y saque un mensaje o no lo deje accesar en el momento que otro persona selecciona el mismo registro!! esto lo necesito hacer para evitar que dos personas modifiquen al mismo tiempo un registro y la informacion de uno de los dos se pierda...
llevo rato buscando como hacerlo pero no he encontrado nada que se adapte a lo que necesito..
Repito.. lo hice a nivel de Base de Datos, osea directamente en la consola .. pero desde la pagina nno he podido, al parecer el PHJP tiene un AUTOCOMMIT, pues inicio la transaccion y al finalizar la escritura del script automaticamente me cierra la transaccion, asi la conexion la deje persistente y sin cerrar la transaccion.
por fa. si alguien sabe como hacerlo le piido por favor me ayuden... | No es pot respondre |
7. factores que afectan el desempeño de un servidor (11/02/2004 19:40, #19719) Por: juan bernardo |
| Como afectan los controladores de la memoria cache a los servidores. | No es pot respondre |
|
8. Re: Cache de código PHP compilado en memoria: APC (03/06/2005 02:56, #26952) Por: Anónimo |
| Hola, hago uso intensivo del php en un contador de páginas webs.
El servidor es un Sempron 2600Mhz con 1 giga de RAM, la CPU suele estar ocupada al 50%, con el APC instalado baja al 17% pero al cabo de unas horas, los procesos de apache que suelen ocupar 4k pasan a ir ocupando 10Megas, cada vez mas procesos ocupan los 10Megas hasta que la pc comienza a sufrir los efectos y se pone mas lenta.
Finalmente decidí desinstalar el APC.
¿Alguien sabe a que se debe? | No es pot respondre |
9. Re: Cache de código PHP compilado en memoria: APC (15/09/2005 06:39, #28388) Por: SlimeLORD |
| Me gustaria saber porque te esta ocurriendo esto con APT...
(si me dejases tu correo podria ayudarte)
Has probado con otros PHP boosters? zend optimizer? eaccelerator? turck?...
Quizas resida el fallo no el el programa, sino en al forma en la que quieres usar los objetos para que estos anden en la caché.
Saludos. | No es pot respondre |
|
10. Re: Cache de código PHP compilado en memoria: APC (19/12/2006 02:46, #37241) Por: Anónimo (http://www.dtodounpoco.ar.vg) |
| Visitad la siguiente página, inscribios y podréis aumentar el tráfico hacia vuestra web visitando la de otros. Se trata de un "intercambio de visitas". Además, si otros amigos se inscriben en vuestro nombre también recibiréis visitas por sus visitas... . ¡Es totalmente gratis!.
sigue este link: http://www.autovisitas.com/?wid=CHEROKY
http://www.dtodounpoco.ar.vg | No es pot respondre |
|
|
|
|---|
|
|
|
|
Calificacion
    Vots: 13 |
Danos tu opinion:
|
|
|
|
|
|
|
|