PDF de programación - Tuning LAMP

Imágen de pdf Tuning LAMP

Tuning LAMPgráfica de visualizaciones

Actualizado el 16 de Marzo del 2020 (Publicado el 29 de Septiembre del 2017)
1.129 visualizaciones desde el 29 de Septiembre del 2017
685,1 KB
54 paginas
Creado hace 14a (19/03/2010)
Afinando ...

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ómo trabaja LAMP?

APACHE

aplicaciones php

PHP


LINUX

HARDWARE

MySQL





¿Cómo trabaja LAMP?

contenido estático:
html, imágenes, ...
contenido dinámico:


APACHE

aplicaciones php
PHP
MySQL

Clientes





LINUX

HARDWARE

¿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 al servidor
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 en Apache 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
que queramos 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 al exterior.
 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
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216

# Incrementa el número de conexiones que pueden ser servidas
net.ipv4.ip_local_port_range = 1024 65000

$ sudo sysctl ­p /etc/sysctl.conf





Afinar Linux:
discos - atime

Cada vez que accedemos a un fichero, aunque
sea para lectura, el sistema de ficheros guarda
una marca de tiempo.

$ sudo vim /etc/fstab

# Dispositivo  Directorio     FS       Opciones
/dev/hda1      none           swap     defaults                0 0
/dev/hda2      /              ext3     defaults,noatime        0 1
/dev/hda3      /home          ext3     defaults,noatime        0 2
none           /proc          proc     defaults                0 0
/dev/fd0       /mnt/floppy    auto     noauto,user,noexec,rw   0 0
/dev/cdrom     /mnt/cdrom     iso9660  noauto,user,noexec,ro   0 0

$ sudo mount / ­o remount
$ sudo mount /home ­o remount





Afinar Linux:

discos - hdparm

Permite afinar el acceso a los discos IDE: 32
bits, tipo de DMA, ... ¡con cuidado!

$ sudo hdparm ­t /dev/sda
Timing buffered disk reads:  162 MB in  3.00 seconds =  53.99 MB/sec

$ sudo hdparm ­vi /dev/sda

características que soporta y las activas

$ sudo hdparm ­c 1 /dev/sda activa el modo de transferencia de 32 bits

$ sudo hdparm ­m x /dev/sda transfiere x sectores por interrupción

$ sudo hdparm ­d 1 ­X x /dev/sda

activa las transferencias DMA y 

establece el modo de DMA al especificado por x

Guardar en algún script de inicio, como por
ejemplo rc.local





Afinar Linux:

NFS

Si utilizamos carpetas en red (evitar NFSv2)
● En el cliente:

$ sudo vim /etc/fstab
#Dispositivo Directorio   FS    Opciones
host2:/tmp   /mnt/host2   nfs   rsize=32768,wsize=32768,intr,noatime
#bloques de 32Kb, las operaciones se interrumpen si se cuelgan, no atime
...
$ sudo mount / ­o remount

● En el servidor suficientes threads NFS:

$ sudo nfsstat ­rc
calls      retrans    authrefrsh
1465903813   0          0       
$ sudo rpc.nfsd 64





Afinar Apache:
¿Cómo funciona?

Diferentes tipos de Apache:
 Apache compilado estáticamente con las

funciones necesarias. Es rápido y ligero, pero
no se pueden añadir nuevas funciones sin
recompilar.

 Apache compilado dinámicamente. Los

módulos se cargan a medida que se necesitan
nuevas funciones. El corazón de Apache (Multi
Processing Modules) no se puede cambiar sin
recompilar.





Afinar Apache:
¿Cómo funciona?

Diferentes Multi Processing Modules:
 Prefork: seguro, varios procesos hijos, un

proceso por petición, bueno para 1 o 2 CPUs,
uso grande de memoria.

 Worker: menos tolerante a fallos, varios

procesos hijos cada uno con varios threads, un
thread por petición, bueno para sistemas
multiprocesador, menor consumo de memoria.

$ httpd ­l   ó   $ apache2 ­l   para saber que MPM utiliza nuestro apache





Afinar Apache:
¿Cómo funciona?

 Al iniciar Apache se crean varios procesos hijo

para atender peticiones.

 Un proceso hijo atiende una petición y después
se queda en reserva, a la espera de que llegue
una petición nueva.

 Las peticiones que no se pueden atender

porque hemos llegado al máximo de procesos
y ninguno está libre, esperan en una cola.





Afinar Apache:
¿Cómo funciona?

 Como crear un nuevo proceso cuando llega
una petición es lento, se intenta que siempre
hayan servidores en reserva preparados para
atender alguna petición.

 Si todos los procesos están ocupados, se
crean un mínimo de procesos en reserva.
 Si hay muchos procesos desocupados, se
matan para que sólo haya un máximo de
procesos en reserva.





Afinar Apache:
¿Cómo funciona?

 Los procesos nacen pesando 3Mb pero al
servir contenido dinámico engordan hasta
20Mb y ya nunca adelgazan:

$ ps ­ylC apache2   para ver lo que pesan los procesos (columna RSS)

 Cuando un proceso ha servido muchas

peticiones, se mata y se crea uno nuevo. Así
evitamos los errores de memoria solicitada
para atender una petición y no liberada.





Afinar Apache:

MPM

Los valores por defecto son muy conservadores.
Ajustémoslos:

$ sudo vim /etc/apache2/apache2.conf

# Procesos que se crean al arrancar
# Un buen valor es el promedio de peticiones simultáneas
StartServers           50

# Mínimo y máximo de procesos en reserva
MinSpareServers        15
MaxSpareServers        30

# Numero máximo de peticiones simultáneas que se atenderán
# Un buen valor es el pico diario de peticiones (vigila suficiente RAM)
MaxClients            225

# Número de peticiones de un proceso antes de morir
MaxRequestsPerChild  4000



$ sudo /etc/init.d/apache2 restart



Afinar Apache:
¿Cómo funciona?

 Apache permite especificar opciones que se

aplicarán a cada directorio y sus
correspondientes subdirectorios: contraseñas,
restringir IPs, etc.

 1ª manera: líneas <Directory ...> en el fichero

de configuración /etc/apache2/apache2.conf

 2ª manera: ficheros .htaccess en cada

directorio. Los puede poner el propietario de
esa parte de la web.





Afinar Apache:
buscar ficheros

 Cuando Apache sirve contenido, primero busca
el fichero .htaccess del directorio del contenido
y también de todos los directorios
anteriores (hasta llegar a la raíz), para poder
aplicar las opciones especificadas para el
directorio.

 Se puede cambiar este comportamiento con la
opción AllowOverride a valor None, y moviendo
la información imprescindible de los .htaccess a
las líneas <Directory> del fichero
/etc/apache2/apache2.conf





Afinar Apache:
buscar ficheros

 Si por seguridad desactivamos enlaces

simbólicos para no servir contenido que esté
fuera de los directorios de la web, Apache
comprueba que el fichero a servir y cada uno
de los directorios des de la raíz no sean
enlaces simbólicos.

 Se puede cambiar este comportamiento con la
opción Options -FollowSymLinks y activándola
sólo en los directorios imprescindibles





Afinar
  • Links de descarga
http://lwp-l.com/pdf7085

Comentarios de: Tuning LAMP (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad