Economista
Copyleft © Alejandro Castán Salinas http://www.xtec.net/~acastan/textos/ Creative Commons by-nc-sa 2.5
Afinando LAMP
Realizar cambios en la configuración de nuestro servidor para mejorar el rendimiento:
Cambios en el hardware Cambios en el sistema operativo: Linux Cambios en los servicios e intérpretes: Apache, PHP, MySQL Cambios en las aplicaciones
¿Cómotrabaja LAMP?
aplicaciones php APACHE PHP LINUX HARDWARE MySQL
¿Cómo trabaja LAMP?
contenido estático: html, imágenes, ... contenido dinámico: aplicaciones php Clientes APACHE LINUX HARDWARE PHP MySQL
¿Cómo trabaja LAMP?
Medir el rendimiento
Medir para saber cuál es el cuello de botella. Medir para hacer predicciones sobre el futuro, cuando el número de peticiones alservidor crezca. Medir el rendimiento antes y después de cada cambio, para ver qué ha mejorado. Los cambios se deben medir de uno en uno.
Medir el rendimiento: monitor del sistema, top, ...
Medir el rendimiento: cURL
curl mide el tiempo de respuesta de un servidor web ante la petición de un único elemento:
$ curl o /dev/null s w %{time_connect}:%{time_starttransfer}:%{time_total}\ http://www.laquimera.org 0.081:0.272:0.779
Procesar petición y comenzar a enviar datos = 0.272 – 0.081 = 0.191 segundos Enviar todos los datos = 0.779 - 0.272 = 0.507 segundos
Medir el rendimiento: Firefox Tamper Data
https://addons.mozilla.org/es-ES/firefox/addon/966
Medir el rendimiento: Apache
Apache HTTP server benchmarking tool (ab) es una utilidad incluida enApache con la que hacer pruebas de carga sobre servidores web.
$ ab n 1000 c 5 http://www.servidor.com/pagina.html Time taken for tests: 42.907696 seconds Failed requests: 0 Total transferred: 584000 bytes Requests per second: 23.31 [#/sec] (mean) Time per request: 214.538 [ms] (mean) Time per request: 42.908 [ms] (mean, across concurrent requests)Transfer rate: 13.28 [Kbytes/sec] received Connection Times (ms) min mean[+/sd] median max Connect: 89 105 189.1 92 3089 Processing: 94 107 34.2 101 669 Waiting: 92 105 29.1 99 445 Total: 184 213 191.9 194 3192
Medir el rendimiento: MySQL
Toman ficheros con peticiones e interrogan el servidor de base de datos el número de veces quequeramos y con el número de conexiones concurrentes que deseemos.
MySQL Super Smack
http://vegan.net/tony/supersmack/
MyBench
http://jeremy.zawodny.com/mysql/mybench/
Medir el rendimiento: más ...
“Easy system monitoring with SAR”
http://www.ibm.com/developerworks/aix/library/au-unix-perfmonsar.html
“Expose Web performance problems with the RRDtool”http://www.ibm.com/developerworks/edu/dw-esdd-webperfrrd-i.html
“Monitoring Virtual Memory with vmstat”
http://www.linuxjournal.com/article/8178
Afinar el hardware
No es el objetivo de esta guía. Según donde esté el cuello de botella podemos cambiar:
CPU más rápida, con varios núcleos, 64 bits. Aumentar la memoria RAM. Discos duros más rápidos, RAID. Ancho de banda de conexión alexterior. Más máquinas: separar servidor web y servidor BBDD, clúster+balanceo carga.
Afinar las aplicaciones
No es el objetivo de esta guía. Depende de cada problema. Los programadores pueden:
Optimizar el código del programa PHP. Optimizar la estructura de tablas y las consultas al servidor de BBDD.
Afinar Linux: TCP/IP
$ sudo vim /etc/sysctl.conf# Activa las TCP syncookies contra los ataques de SYN Flooding net.ipv4.tcp_syncookies = 1 # Aumenta el tamaño de ventana (paquetes enviados antes de un ACK) net.ipv4.tcp_window_scaling = 1 # Incrementa el tamaño de los buffers de llegada y envío de paquetes. # Permiten a las aplicaciones del servidor tomar datos más rápidamente, # y al cliente enviar más datos aunque el servidor esté ocupado net.core.rmem_max = 16777216...
Regístrate para leer el documento completo.