GNU/Linux >> Linux Esercitazione >  >> Linux

Testare il carico dei server Web con Siege Benchmark Tool

Introduzione

Siege è un test di regressione open source e un'utilità di benchmark. Può eseguire lo stress test di un singolo URL con un numero definito dall'utente di utenti simulati oppure può leggere molti URL in memoria e sollecitarli contemporaneamente. Il programma riporta il numero totale di hit registrati, byte trasferiti, tempo di risposta, concorrenza e stato di ritorno. Siege supporta i protocolli HTTP/1.0 e 1.1, le direttive GET e POST, i cookie, la registrazione delle transazioni e l'autenticazione di base. Le sue funzionalità sono configurabili per utente.

La maggior parte delle funzionalità è configurabile con opzioni della riga di comando che includono anche valori predefiniti per ridurre al minimo la complessità dell'invocazione del programma. Quindi Siege ti consente di stressare un server web con n numero di utenti t numero di volte, dove n e t sono definiti dall'utente. Registra il tempo di durata del test e la durata di ogni singola transazione. Riporta il numero di transazioni, il tempo trascorso, i byte trasferiti, il tempo di risposta, il tasso di transazione, la concorrenza e il numero di volte in cui il server ha risposto OK, ovvero il codice di stato 200.

Anche Assedio dovrebbe essere eseguito solo su server di tua proprietà o su quelli di cui hai il permesso esplicito per testare. In alcuni paesi, utilizzare l'assedio su siti Web non autorizzati può essere considerato un crimine.

INSTALLAZIONE

Siege è stato creato con GNU autoconf. Se hai familiarità con il software GNU, dovresti essere a tuo agio nell'installare siege Consulta il file INSTALL per maggiori dettagli.

Per installare Siege sotto Debin/Ubuntu , puoi farlo con il comando:

$ sudo apt install siege

Per CentOS/RHEL , Installa e attiva epel repository per installare siege :

# yum install epel-release
# yum install siege

Inoltre puoi costruire l'Assedio dalla fonte. A tale scopo dovrai avere build-essenziale e pacchetti di sviluppo installati.

For Debian/Ubuntu
$ sudo apt install build-essential  

For CentOS/RHEL   
# yum groupinstall 'Development Tools'  

Quindi scarica Siege e installa dalle fonti come mostrato.

[root@unixcop ~]# wget http://download.joedog.org/siege/siege-latest.tar.gz
--2021-08-24 07:12:17--  http://download.joedog.org/siege/siege-latest.tar.gz
Resolving download.joedog.org (download.joedog.org)... 52.24.24.107
Connecting to download.joedog.org (download.joedog.org)|52.24.24.107|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 543378 (531K) [application/x-gzip]
Saving to: ‘siege-latest.tar.gz’

100%[============================================================================================================>] 543,378     --.-K/s   in 0.1s    

2021-08-24 07:12:18 (4.57 MB/s) - ‘siege-latest.tar.gz’ saved [543378/543378]

[root@unixcop ~]#

Quindi estrailo:

$ tar -zxvf siege-latest.tar.gz

Vai anche alla directory estratta e installala con:

$ cd siege-*/
$ sudo ./configure --prefix=/usr/local --with-ssl=/usr/bin/openssl
$ sudo make && make install

Configurazione di Siege

Una volta completata l'installazione, puoi modificare il tuo assedio file di configurazione. Si trova in /etc/siege/siegerc . Nel caso in cui tu abbia deciso di compilare il pacchetto dal sorgente, dovrai eseguire:

$ siege.config

Inoltre, questo genererà siege.conf file che si trova nella home del tuo utente ~/.siege/siege.conf .

Il contenuto del file dovrebbe assomigliare a questo. Nota che ho decommentato il file di registro e tempo direttive:

[root@unixcop siege]# cat siegerc |egrep -v "^$|#"
verbose = true
color = on
quiet = false
json_output = false
show-logfile = true
logging = false
logfile = ${HOME}/siege.log
gmethod = HEAD
parser = true
nofollow = ad.doubleclick.net
nofollow = pagead2.googlesyndication.com
nofollow = ads.pubsqrd.com
nofollow = ib.adnxs.com
limit = 255
protocol = HTTP/1.1
chunked = true
cache = false
connection = close
concurrent = 25
delay = 0.0 
internet = false
benchmark = false
accept-encoding = gzip, deflate
url-escaping = true
unique = true
 
[root@unixcop siege]#

Inoltre, con la configurazione attuale, assedio imiterà 25 utenti simultanei in 1 minuto.

Ora sei pronto per eseguire il tuo assedio.

Test del caricamento del sito web con Siege

Devi solo specificare il sito web che desideri testare in questo modo:

# siege example.com
 
[root@unixcop .siege]# siege 192.168.13.133/unixcop
[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.1.1
** Preparing 25 concurrent users for battle.
The server is now under siege...
Lifting the server siege...
Transactions:		         6457 hits
Availability:		      100.00 %
Elapsed time:		        1.45 secs
Data transferred:	       11.51 MB
Response time:		        0.05 secs
Transaction rate:	      453.10 trans/sec
Throughput:		        7.94 MB/sec
Concurrency:		       24.20
Successful transactions:         672
Failed transactions:	           0
Longest transaction:	        0.24
Shortest transaction:	        0.02
 
[root@unixcop .siege]# 

Se la disponibilità rimane al 100% e non ci sono connessioni fallite, il tuo sistema ha funzionato bene e non ci sono stati problemi. Dovresti anche tenere d'occhio il tempo di risposta.

Esegui Siege con più siti web

Puoi testare più URL impostando assedio per leggerli da file. Puoi descrivere gli URL in /usr/local/etc/urls.txt così:

[root@unixcop ~]# cd /usr/local/etc/
[root@unixcop etc]# cat urls.txt 
# URLS file for siege
# --
# Format the url entries in any of the following formats:
# http://www.whoohoo.com/index.html
# http://www/index.html
# www/index.html
# http://www.whoohoo.com/cgi-bin/howto/display.cgi?1013
# Use the POST directive for pages that require it:
# http://www.whoohoo.com/cgi-bin/haha.cgi POST ha=1&ho=2
#      or POST content from a file:
# http://www.whoohoo.com/melvin.jsp POST </home/jeff/haha
# http://www.whoohoo.com/melvin.jsp POST <./haha
# 
# You may also assign and reference variables inside this file:
# HOST=www.joedog.org
# PROT=https  # Secure protocol
# PORT=443    # Default https port
# 
# $(PROT)://$(HOST):$(PORT)/siege/jsoner.php?haha=papa
# $(PROT)://$(HOST)/siege/jsoner.php?day=%2332
# $(PROT)://$(HOST)/siege/jsoner.php POST {haha:papa}
# 
# Since $ is used to prefix scalar variables, you have to escape 
# them if you want to pass them to the server: 
# $(PROT)://$(HOST)/siege/jsoner.php?amount=\$10.00&cost=\$12.99
# -------------------------------------------------------

[root@unixcop etc]#

Anche per dire assedio per testare gli URL dal file, usa -f opzione come questa:

# siege -f /usr/local/etc/urls.txt

Puoi anche utilizzare le opzioni della riga di comando:

Options:
-V,     --version VERSION, prints the version number.
-h,     --help HELP, prints this section.
-C,     --config CONFIGURATION, show the current config.
-v,     --verbose VERBOSE, prints notification to screen.
-q,     --quiet QUIET turns verbose off and suppresses output.
-g,     --get GET, pull down HTTP headers and display the transaction. Great for application debugging.
-p,     --print PRINT, like GET only it prints the entire page.
-c,      --concurrent=NUM CONCURRENT users, default is 10
-r,      --reps=NUM REPS, number of times to run the test.
-t,     --time=NUMm TIMED testing where "m" is modifier S, M, or H
ex:   --time=1H, one hour test.
-d,    --delay=NUM Time DELAY, random delay before each request
-b,    --benchmark BENCHMARK: no delays between requests.
-i,      --internet INTERNET user simulation, hits URLs randomly.
-f,      --file=FILE FILE, select a specific URLS FILE.
-R,     --rc=FILE RC, specify an siegerc file
-l,      --log[=FILE] LOG to FILE. If FILE is not specified, the default is used: PREFIX/var/siege.log
-m,    --mark="text" MARK, mark the log file with a string. between .001 and NUM. (NOT COUNTED IN STATS)
-H,    --header="text" Add a header to request (can be many)
-A,    --user-agent="text" Sets User-Agent in request
-T,     --content-type="text" Sets Content-Type in request
-j,      --json-output JSON OUTPUT, print final stats to stdout as JSON
         --no-parser NO PARSER, turn off the HTML page parser
        --no-follow NO FOLLOW, do not follow HTTP redirects

Conclusione

Assedio è un potente strumento per misurare l'affidabilità del sistema in condizioni di carico elevato. Dovresti sempre eseguire i tuoi test con cautela poiché il server testato potrebbe diventare inaccessibile durante la valutazione. Tag


Linux
  1. Ispeziona le capacità dei binari ELF con questo strumento open source

  2. Carica test sul tuo server web usando Siege (Strumento di benchmarking)

  3. Utilizzo del client python-nova con Rackspace Cloud Server

  4. I migliori server Web Linux

  5. Monitoraggio del livello del microfono con uno strumento a riga di comando in Linux

Come proteggere i server Linux con SE Linux

Bilanciamento del carico con HAProxy, Nginx e Keepalived in Linux

Come trovare la posizione dei tuoi server con Traceroute e WHOIS

Come confrontare le prestazioni del server Web con Apache Bench

Come monitorare gli host con lo strumento di monitoraggio Icinga di Linux

Test di caricamento del sito Web con Apache JMeter su Ubuntu 20.04