miércoles, noviembre 30, 2005

Benchmark de PHP con Eaccelerator y APC

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:
ab "http://servidor/ruta/script.php" -c 200 -t 60
La 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:
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

4 comentarios:

  1. Hola!, te escribo porque me ha ocurrido el mismo problema del "Segment Fault" al instalar Eaccelerator o APC, la diferencia es que con Eaccelerator ocurre mucho mas rapido que con APC.
    Me gustaria saber si has encontrado alguna solucion para este problema.

    Bueno espero que me puedas responder. Gracias.

    Chihau Chau

    ResponderEliminar
  2. Te respondo por aqui porque no tengo tu correo.

    El problema de los Segmentation Fault se solucion al cambiar de version del nucleo de linux. Era un fallo de una tabla de procesos (que no recuerdo el nombre) motivada por el numero de peticiones abiertas (cuando superaba las 1000 conexiones simultaneas de apache)

    La solución temporal que se encontró fue un programa en C, que cada X segundos se levantaba, miraba el log de apache en busca de 'Segmentation fault' y se volvia a dormir. En caso de encontrar esos mensajes, reiniciaba el apache. Solución drastica, pero no teniamos más remedio que hacerlo así.

    Un saludo.

    ResponderEliminar
  3. Amigo una consulta donde puedo chequear mi configuracion de Eaccelerator.

    gracias

    ResponderEliminar
  4. ¿A que te refieres exactamente con chequear tu configuracion? Si es para comprobar que las entradas que tienes en el php.ini referentes al eaccelerator lo puedes ver en el readme o install que te viene con el codigo fuente del eaccelerator.

    ResponderEliminar

Cómo utilizar el servicio Secrets Manager para guardar las claves privadas de SSH

Para guardar la clave privada en el servicio Secrets Manager como un secreto en modo texto sin formato, sigue estos pasos Supongamos que la ...