Optimizar la ejecución de PHP y MySQL
Otra cosa es que al parecer no se queda nunca en ejecución, siempre me pone:
Start Time 13-02-2009 15:09:10
Uptime 0 minutes
Me pasa a menudo, cada vez que cambio mi php.ini los cambios se aplican "al vuelo", no tengo que reiniciar Apache ni nada, ¿esto es normal? ¿Es posible que php se este iniciando (y cargando, por tanto, su php.ini) cada vez que ejecuto cualquier script?
EDITO: Definitivamente, no se queda nunca en ejecución APC, guardo una variable en cache y al volver a a ejecutar el script no encuentra ningun valor guardado.
La verdad, no se. Se me hace extraño que no te funcione y que no haya ningún error en ninguna parte. Que se yo, si es algo de permisos, o que el disco que usa para ficheros de trabajo/cache no le deja crear/actualizar datos, debería haber mensajes de error en alguna parte.
Lo tengo compilado como dices y he copiado los datos de tu php.ini y nada...
es raro, ni eaccelerator ni apc han funcionado :S
La opcion del mount que me comentas que es? ya es lo poco que me queda por probar...
un saludo
Puede que tenga relación con las opciones que hayas usado en el ./configure del APC.
En el "Locking type", a mí me dice "pthread mutex Locks", y a tí "File Locks". Aquí, en un CentOS 5, lo tengo compilado con:
Código:
./configure --enable-apc --enable-apc-mmap
En el php.ini:
Código:
extension="apc.so"
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 128
apc.num_files_hint = 0
apc.user_entries_hint = 0
apc.ttl = 7200
apc.user_ttl = 7200
apc.gc_ttl = 3600
apc.mmap_file_mask = /tmp/apc.XXXXXX
Si todavía no te funciona, quizá sea alguna opción del mount de donde tienes los scripts PHP. No se me ocurre nada más.
Alguna idea de por que pasa? Al parecer, no puede guardar en cache los scripts compilados, por lo que cada vez que se ejecuta cualquier script de la pagina, se compila y se intenta guardar de nuevo en cache, ralentizando el sistema.
Otra zona que parece "extraña" es la de Hits y Misses, donde se supone que Misses deberian ser 0 o muy pocas, ami actualmente me sale esto:
Hits: 1 (16.7%)
Misses: 5 (83.3%)
Pues eso tiene pinta de que el cuello de botella está en otra parte. Quizá te está paginando, o es la BBDD, o al acceso a disco....
Al parecer, APC está instalado correctamente, puedo acceder incluso a su GUI de configuración, pero aun asi el rendimiento de mi aplicación ha bajado: de 10 peticiones por segundo que puede procesar sin cache de opcodes, a solamente 8 con APC.
Y aun así, actualmente solo cachea cuatro o cinco documentos php, el resto no sé porque no los procesa...
EDITO La marca de ultimo acceso y la de creacion siempre es la misma, al parecer no puede guardar en la carpeta temporal los datos:
Script Filename Hits Size Last accessed Last modified Created at Deleted at
/home/www/index.php 0 512 12-02-2009 16:30:35 04-02-2009 00:13:26 12-02-2009 16:30:35
/home/www/aplicacion/configuracion.php 0 5162 12-02-2009 16:30:35 11-02-2009 18:13:27 12-02-2009 16:30:35
/home/www/aplicacion/base.php 0 23617 12-02-2009 16:30:35 12-02-2009 14:43:31 12-02-2009 16:30:35
/home/www/aplicacion/admin/index.php 0 4260 12-02-2009 16:30:35 12-02-2009 15:59:03 12-02-2009 16:30:35
/home/www/aplicacion/admin/apc.php 0 292600 12-02-2009 16:30:35 12-02-2009 15:58:59 12-02-2009 16:30:35
Quizá sea que lo que estás probando no es muy pesado, o tiene el cuello de botella en otra parte, o quizá con 5 peticiones concurrentes sea poco para ver la diferencia.
Harto de probar, he instalado APC, que parece más sencillo de usar. He vuelto ha hacer pruebas y nada, no se nota ninguna mejoría:
Concurrency Level: 5
Time taken for tests: 363.917191 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 30324198 bytes
HTML transferred: 28758000 bytes
Requests per second: 8.24 [#/sec] (mean)
Time per request: 606.529 [ms] (mean)
Time per request: 121.306 [ms] (mean, across all concurrent requests)
Transfer rate: 81.37 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 7
Processing: 345 605 121.8 586 1453
Waiting: 330 580 119.9 561 1414
Total: 345 605 121.8 586 1453
Percentage of the requests served within a certain time (ms)
50% 586
66% 643
75% 678
80% 703
90% 777
95% 823
98% 896
99% 967
100% 1453 (longest request)
En mi php.ini tengo esta configuracion:
extension=apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
y en php_info() aparece esto:
apc
APC Support enabled
Version 3.0.19
MMAP Support Enabled
MMAP File Mask /tmp/apc.g93lQc
Locking type File Locks
Revision $Revision: 3.154.2.5 $
Build Date Feb 12 2009 14:30:12
¿Alguna idea?
Quizá tengas algún mensaje en el log de errores del PHP.
Para tener acceso al controlpanel, si no recuerdo mal, era necesario definirle un usuario y contraseña que se encripta y se le configura en el php.ini.
También miraría de definir algo que encage con tu configuración en eaccelerator.filter
Esta todo correcto, el archivo temporal creado y con permisos 777.
eAccelerator
eAccelerator support enabled
Version 0.9.5.3
Caching Enabled false
Optimizer Enabled false
Directive Local Value Master Value
eaccelerator.allowed_admin_path /home/www/controlpanel /home/www/controlpanel
eaccelerator.cache_dir /tmp/eaccelerator /tmp/eaccelerator
eaccelerator.check_mtime 1 1
eaccelerator.compress 1 1
eaccelerator.compress_level 9 9
eaccelerator.debug 0 0
eaccelerator.enable 1 1
eaccelerator.filter no value no value
eaccelerator.log_file /home/eaccelerator_log /home/eaccelerator_log
eaccelerator.name_space no value no value
eaccelerator.optimizer 1 1
eaccelerator.shm_max 0 0
eaccelerator.shm_only 0 0
eaccelerator.shm_prune_period 0 0
eaccelerator.shm_size 16 16
eaccelerator.shm_ttl 0 0
Al intentar acceder al panel de control me dice esto:
An error occured getting eAccelerator information, this is caused if eAccelerator isn't initalised properly
En el phpinfo() tiene que salirte una sección donde veas los parámetros activos para el eAccelerator. Comprueba que todo lo que hayas añadido en el php.ini se te ve reflejado ahí.
También tienes que crear un directorio para el cache de opcodes, y eso decírselo en el php.ini
He hecho unas pruebas una vez instalado eAccelerator y los resultados son estos:
/usr/local/apache/bin/ab -c5 -n3000 http://www.dominio.com
SIN CACHE----------------------------------------------
Concurrency Level: 5
Time taken for tests: 284.703817 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 30334460 bytes
HTML transferred: 28767586 bytes
Requests per second: 10.54 [#/sec] (mean)
Time per request: 474.506 [ms] (mean)
Time per request: 94.901 [ms] (mean, across all concurrent requests)
Transfer rate: 104.05 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 17
Processing: 277 473 102.4 452 1052
Waiting: 257 450 100.2 428 1039
Total: 277 473 102.4 452 1052
Percentage of the requests served within a certain time (ms)
50% 452
66% 503
75% 534
80% 559
90% 616
95% 662
98% 720
99% 766
100% 1052 (longest request)
CON CACHE----------------------------------------------
Concurrency Level: 5
Time taken for tests: 288.509204 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 30324198 bytes
HTML transferred: 28758000 bytes
Requests per second: 10.40 [#/sec] (mean)
Time per request: 480.849 [ms] (mean)
Time per request: 96.170 [ms] (mean, across all concurrent requests)
Transfer rate: 102.64 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.1 0 56
Processing: 260 479 101.3 462 1394
Waiting: 244 456 99.1 438 1376
Total: 260 479 101.3 462 1394
Percentage of the requests served within a certain time (ms)
50% 462
66% 508
75% 538
80% 561
90% 614
95% 665
98% 727
99% 780
100% 1394 (longest request)
No se nota la diferencia, ¿es normal?
EDITO: Al parecer, esta instalado pero no se ejecuta, al ejecutar php_info me sale:
eAccelerator
eAccelerator support enabled
Version 0.9.5.3
Caching Enabled false
Optimizer Enabled false
A pesar de que tanto la cache como la optimizacion estan habilitadas en php.ini
Ahora mismo acabo de instalar eAccelerator, probaré a ver que tal va y si veo que me da errores probaré APC.
¡Muchas gracias por todo!
Sip, pero puedes tener problemas de estabilidad, con los segfaults estos.
Aquí un bug relacionado:
http://eaccelerator.net/ticket/155
Nosotros hemos estado usando eAccelerator durante mucho tiempo, y se nota la mejora en el rendimiento la primera vez que usas un Opcode cache, pero hemos estado sufriendo este bug que te comento, y después de esperar a ver si solucionaban el bug, hemos decidido abandonarlo en favor de APC. La ventaja de éste último es que es un proyecto por el cual apuestan los propios fundadores del PHP:
http://pecl.php.net/package/apc
De todos modos, lo mejor es probarlo uno mismo. YMMV ;-)
esa es justo la web en la que he leido sobre eAccelerator, que al parecer funciona mejor que APC y XCache
El eAccelerator puede generar segfaults en determinadas circunstancias a causa de algún bug que hace tiempo está por ahí. Si te ocurre, tienes que reiniciar el Apache.
El APC no parece estar tan optimizado, pero sí que es más estable.
Aquí tienes una web en la que hay algunos benchmarks:
http://2bits.com/articles/benchmarki...-compared.html
Hola, estoy migrando una página hacia un servidor RPSII (2x 1.6 GHz, 1 GB DDR2), y quiero optimizar la ejecución de mis scripts para soportar bien la carga de visitas (unas 30.000 al día).
Por ahora, había pensando en instalar eAccelerator, pero he visto por otros foros que hay más alternativas, como Zend Optimizer o IonCube. ¿Alguno de vosotros las ha probado? ¿Qué tal con ellas?
Un Saludo.