OVH Community, your new community space.

Optimizar la ejecución de PHP y MySQL


aNTraX
13/02/2009, 14:07
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.

markus
13/02/2009, 08:36
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.

aNTraX
13/02/2009, 00:40
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

markus
12/02/2009, 20:20
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.

aNTraX
12/02/2009, 17:00
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.

aNTraX
12/02/2009, 15:33
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%)

markus
12/02/2009, 15:28
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....

aNTraX
12/02/2009, 15:26
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

markus
12/02/2009, 15:25
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.

aNTraX
12/02/2009, 14:22
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?

markus
12/02/2009, 13:16
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

aNTraX
12/02/2009, 13:05
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

markus
12/02/2009, 12:55
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

aNTraX
12/02/2009, 12:34
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

aNTraX
12/02/2009, 11:49
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!

markus
12/02/2009, 11:37
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 ;-)

aNTraX
12/02/2009, 11:26
esa es justo la web en la que he leido sobre eAccelerator, que al parecer funciona mejor que APC y XCache

markus
12/02/2009, 11:20
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

aNTraX
12/02/2009, 10:51
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.