domingo, 5 de diciembre de 2010

Mejorando la performance de Yupp Framework

Hace un par de semanas hice la primer prueba de performance en tiempos de respuesta sobre el framework. Para hacer las pruebas utilicé Apache Bench (http://httpd.apache.org/docs/2.0/programs/ab.html).

Primero lancé una prueba sin ninguna optimización. Para esto utilicé una aplicación simple, sin acceso a la base de datos (lo que llaman un "hello world" básico). De esta prueba obtuve como resultado que el framework soportaba 5.5 pedidos por segundo y en promedio cada pedido se resolvía en 1.8 segundos (esto cuenta envío 
del pedido, procesamiento de Apache, procesamiento del framework y envío de la respuesta).


Luego, puse un objetivo para bajar los tiempos de respuesta y aumentar los pedidos que se pueden hacer por segundo. El objetivo fue llevarlo al doble, o sea: atender 11 pedidos por segundo y que en promedio, el tiempo de respuesta fuera de 0.9 seg.


Luego de algunas optimizaciones en la inclusión de clases en el index.php, se obtuvieron mejores resultados de los esperados: más de 27 pedidos por segundo y una demora promedio de 367 ms por pedido. A continuación dejo el detalle de los resultados.


Creo que con un poco más de optimización podremos llegar a 40 pedidos por segundo y 200 ms de tiempo promedio por pedido. 



C:\wamp\bin\apache\Apache2.2.11\bin>ab -k -n 1000 -c 10 http://localhost/YuppPHPFramework/apli/entrada/index
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests 

Server Software:        Apache/2.2.11
Server Hostname:        localhost
Server Port:            80 

Document Path:          /YuppPHPFramework/apli/entrada/index
Document Length:        33 bytes 

Concurrency Level:      10
Time taken for tests:   181.797 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    995
Total transferred:      449790 bytes
HTML transferred:       33000 bytes
Requests per second:    5.50 [#/sec] (mean)
Time per request:       1817.969 [ms] (mean) 

Time per request:       181.797 [ms] (mean, across all concurrent
requests)
Transfer rate:          2.42 [Kbytes/sec] received 

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0      16
Processing:  1031 1810 445.8   1672    4844
Waiting:     1031 1810 445.9   1672    4844
Total:       1031 1810 445.8   1672    4844 

Percentage of the requests served within a certain time (ms)
  50%   1672
  66%   1828
  75%   2063
  80%   2344
  90%   2516
  95%   2641
  98%   2719
  99%   2828
 100%   4844 (longest request) 






C:\wamp\bin\apache\Apache2.2.11\bin>ab -k -n 1000 -c 10 http://localhost/YuppPHPFramework/apli/entrada/index
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ 

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests 

Server Software:        Apache/2.2.11
Server Hostname:        localhost
Server Port:            80 

Document Path:          /YuppPHPFramework/apli/entrada/index
Document Length:        33 bytes 

Concurrency Level:      10
Time taken for tests:   36.891 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    997
Total transferred:      449836 bytes
HTML transferred:       33000 bytes
Requests per second:    27.11 [#/sec] (mean) 
Time per request:       368.906 [ms] (mean) 
Time per request:       36.891 [ms] (mean, across all concurrent
requests)
Transfer rate:          11.91 [Kbytes/sec] received 

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0      16
Processing:   266  367  50.1    359     828
Waiting:      266  367  50.1    359     828
Total:        266  367  50.1    359     828 

Percentage of the requests served within a certain time (ms)
  50%    359
  66%    375
  75%    391
  80%    391
  90%    422
  95%    453
  98%    516
  99%    563
 100%    828 (longest request) 



No hay comentarios:

Publicar un comentario