Una de las preocupaciones habituales de los que tienen un sitio web con WordPress es saber cuánto tráfico y a qué velocidad les funcionará a los usuarios el sitio web. Y la herramienta para ello es la de un test de estrés.
Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.
Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.
COLABORACIÓN
Para hacer estas pruebas podemos usar AB (Apache HTTP server benchmarking tool), pero también una herramienta más moderna en llamada wrk (a HTTP benchmarking tool). La herramienta la deberemos tener en una máquina conectada a Internet si queremos hacer llamadas a una web pública. En este caso el ejemplo será sobre Ubuntu.
Instalación de la herramienta
Lo primero que hemos de hacer es descargar y compilar la herramienta. Una vez acabado estará disponible en el servidor.
apt -y install build-essential libssl-dev git unzip
cd
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
cp wrk /usr/local/bin
A partir de este momento, podemos ejecutar la herramienta y ver sus opciones.
Usage: wrk <options> <url>
Options:
-c, --connections <N> Connections to keep open
-d, --duration <T> Duration of test
-t, --threads <N> Number of threads to use
-s, --script <S> Load Lua script file
-H, --header <H> Add header to request
--latency Print latency statistics
--timeout <T> Socket/request timeout
-v, --version Print version details
Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)
Haciendo una primera prueba
Pruebas de estrés puede haber varias, así que haremos una primera prueba, sencilla, que es la de acceder, mucho, a la página principal de nuestro sitio.
La configuración dependerá mucho de los recursos de la máquina. En este caso, vamos a hacer una prueba en un VPS que tiene 4 CPU, y haremos una prueba durante 30 segundos. Según la configuración que tengamos, podemos añadir más o menos usuarios simultáneos (por CPU), en este caso 250 usuarios. En total significa que habrá 1.000 usuarios en 30 segundos.
wrk -c250 -d30s -t4 --latency --timeout 5s https://www.example.com/
c
: 250 conexiones por hilod
: 30 segundost
: 4 hilos (CPU)
El resultado será similar a este:
Running 10s test @ https://www.example.com/
1 threads and 50 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.85s 902.12ms 3.56s 83.67%
Req/Sec 15.08 7.34 40.00 85.71%
Latency Distribution
50% 3.31s
75% 3.39s
90% 3.44s
99% 3.53s
147 requests in 10.02s, 1.40MB read
Requests/sec: 14.67
Transfer/sec: 142.55KB
Para ajustar las peticiones deberías tener en cuenta como base las CPU de la máquina, y la cantidad de peticiones (si quieres probar normal, 100 está bien, si tienes montado algo muy bien, una prueba interesante es de 1.000. El tiempo, el que se considere… entre 30 segundos y 1 minuto está bien.
Estresando el login
Sin duda probar la página principal está bien, pero como puede haber caché, en realidad nos e prueba mucha cosa, así que quizá podamos estresar el sistema accediendo al panel de administración (puede ser de un usuario sin permisos). En este caso el test va a estar más en la base de datos.
Lo primero que deberemos hacer es crear un fichero de configuración especial. Aquí incluiremos la página del login, y el usuario y contraseña de un usuario.
vim wplogin.lua
Ahí incluiremos los datos de acceso y la prueba.
wrk.method = "POST"
wrk.body = "log=usuario_de_test&pwd=contrasenya_del_usuario&wp-submit=Acceder&testcookie=1&redirect_to=https://www.example.com/wp-admin/"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
En este caso, la prueba no puede ser tan grande como en el caso anterior. Lo que probaremos será cuántos logins/segundo se pueden hacer. Por ejemplo, probemos si se pueden hacer 10 logins por segundos.
wrk -c100 -d10s -t1 --latency --timeout 5s -s wplogin.lua https://www.example.com/wp-login.php
Haciendo peticiones a múltiples URL
Una de las cosas que habitualmente se suele probar es llamar a sólo una única URL, y quizá lo más interesante es elegir y probar distintas URL: la página principal, una categoría, una entrada, una página, un producto…
vim wpurl.lua
Ahí incluiremos los datos de acceso y la prueba.
init = function(args)
local r = {}
r[1] = wrk.format(nil, "pagina/")
r[2] = wrk.format(nil, "post/")
r[3] = wrk.format(nil, "tag/etiqueta/")
r[4] = wrk.format(nil, "category/categoria/")
req = table.concat(r)
end
request = function()
return req
end
Ahora haremos la prueba para que llame, de forma aleatoria, a estas URL…
wrk -c1k -d1m -t16 --latency --timeout 5s -s wpurl.lua https://www.example.com/
Y a probar y optimizar.
Sobre este documento
Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.