Hoy en el trabajo, después de montar los modulos del Eaccelerator (versión 0.93) y el APC (versión 3.0.8) con el PHP (4.4.1) y Apache (1.3.34), he hecho unas mediciones de rendimiento con ellos.
El programa para hacer el Benchmark ha sido el Apache Benchmark (ab para los amigos). El script que he escogido ha sido uno que teniamos hecho en el empresa para una tarea de última hora que se hizo el día anterior. Ese script tiene varias consultas en una base de datos y la generacion de un boton select en funcion del resultado de la consulta y de una tabla con otro resultado de otra consulta.
Cada medición la lance 3 veces sobre la misma configuración. La medicion se hacia desde otra maquina con la siguiente orden, 200 peticiones concurrentes durante 60 segundos:
Las configuracion de Eaccelerator y APC son los mas parecida posible y siguiendo las recomendaciones por defecto. Las simportante son 64 Megas de cache, y almacenar los script en memoria.
Los resultados, en números son:
El programa para hacer el Benchmark ha sido el Apache Benchmark (ab para los amigos). El script que he escogido ha sido uno que teniamos hecho en el empresa para una tarea de última hora que se hizo el día anterior. Ese script tiene varias consultas en una base de datos y la generacion de un boton select en funcion del resultado de la consulta y de una tabla con otro resultado de otra consulta.
Cada medición la lance 3 veces sobre la misma configuración. La medicion se hacia desde otra maquina con la siguiente orden, 200 peticiones concurrentes durante 60 segundos:
ab "http://servidor/ruta/script.php" -c 200 -t 60La configuración hardware del servidor es un maquina equipada con 2 procesadores duales Xeon de 2'8 MHz y 4 Gigas de Ram.
Las configuracion de Eaccelerator y APC son los mas parecida posible y siguiendo las recomendaciones por defecto. Las simportante son 64 Megas de cache, y almacenar los script en memoria.
Los resultados, en números son:
- PHP: 1150 req/sec, 1458 req/sec, 1497 req/sec
- PHP+Eaccelerator: 1457 req/sec, 2118 req/sec, 2354 req/sec
- PHP+APC: 1533 req/sec, 2398 req/sec, 2355 req/sec
Eaccelerator y APC son parecidos, y en esta prueba ha salido triunfador APC. Pero puede ser sólo un caso particular. Lo importante es ver que son parecidos en rendimiento y que se nota muchisimo no tener un cacheador de script de PHP.
Es importante esta medición, porque el Eaccelerator tiene un grave problema con mucha carga, provoca caidas aleatorias del apache por 'segment fault' y que nos obligan a tener un script monitorizador del buen estado del apache y que se encarga de hacer un restart del mismo llegado el momento de los 'segment fault'.
También me ha servido para dominar con soltura todos los pasos que rodean a la compilación e instalacion de apache, php y sus modulos relacionados, así como optener unas mediciones que dan una aproximación de que las cosas merecen la pena al actualizar software en un servidor web.
Configuracion del Eaccelerator:
Configuracion del APC:
Es importante esta medición, porque el Eaccelerator tiene un grave problema con mucha carga, provoca caidas aleatorias del apache por 'segment fault' y que nos obligan a tener un script monitorizador del buen estado del apache y que se encarga de hacer un restart del mismo llegado el momento de los 'segment fault'.
También me ha servido para dominar con soltura todos los pasos que rodean a la compilación e instalacion de apache, php y sus modulos relacionados, así como optener unas mediciones que dan una aproximación de que las cosas merecen la pena al actualizar software en un servidor web.
Configuracion del Eaccelerator:
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/tmp/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="86400"
eaccelerator.shm_only="1"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.sessions = "none"
eaccelerator.keys = "shm_only"
eaccelerator.sessions = "none"
eaccelerator.content = "shm_only"
Configuracion del APC:
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.optimization = 0
apc.num_files_hint = 1000
apc.ttl = 0
apc.gc_ttl = 3600
apc.cache_by_default = On
apc.filters = ""
apc.mmap_file_mask = ""
apc.slam_defense = 0
apc.file_update_protection = 2
apc.enable_cli = 0
apc.max_file_size = 1M