BULMA

Bulma se une a la protesta contra SOPA y PIPA

Bergantells Usuaris de GNU/Linux de Mallorca i Afegitons   |   Bisoños Usuarios de GNU/Linux de Mallorca y Alrededores
CONTENIDOS
. Jornadas de software libre
. Version para PDA
. Enlaces breves
. La asociacion
. Los mas leidos
. Autores [Actividad]
. Ultimos Comentarios
. Todos los titulares!
. Estadisticas
. Guia de estilo
. ¿Sugerencias?
. Wiki
. XML [Ayuda]
Listas de correo
. Archivos bulmailing
. Archivos BulmaGes
Radio libre :-)
. Des de la Xarxa (Archivos)
. Mallorca en Xarxa
Busquedas

+ Enlaces Linux
Ultimos kernels
(18/06/2013 23:04:29)
    
Google


En bulma.net
En internet
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:

  1. Poner el ejecutable (php_apc.so) en el directorio de extensiones del PHP4.
  2. Indicar en el php.ini que se cargue dicho módulo:
  3. Indicar las parámetros necesarios o deseados en el mismo fichero.
  4. 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).

 


Imprimir
Version para
imprimir

Imprimir
Version
PDF
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
 
GRACIAS
Distribuciones Universal
Por el servidor
Dpto. de Matematicas e Informatica
Calificacion
***0
Vots: 13
Danos tu opinion:
**** Excelente
***0 Muy Bueno
**00 Bueno
*000 Regular
0000 Malo
Relacionados
. Tutorial PHP4 - Parte I
. Reducción del tiempo de respuesta de Bulma optimizando las consultas a Postgres
. Código PHP de Bulma analizado en detalle por Zend
SECCIONES
Noticia
Breve
Truco
Enlace
Participa
Proyecto
Articulo
Webbulma
Manoletada :-)
Seguridad
Modificado: 20/4/2007 21:56:33 | Tiempo Total: 0.034 segs | Kernel: Linux - i686 - 2.6.26-2-686 | Last boot: too much time ago!!
Powered by Apache    MySQL    PHP    Gimp